Communitygithub.com

madsouris/sketch-design-from-reference

從參考網址、螢幕截圖或原始碼,在 Sketch 中重建或建構 UI 設計,並透過並排螢幕截圖比對驗證精確度(使用 Sketch MCP)。

sketch-design-from-reference 是什麼?

此技能讓 AI 代理能從外部參考(URL、螢幕截圖或原始碼)在 Sketch 中精確還原 UI 設計。它優先採用視覺校準:目標是達到像素級一致,而非僅是「看起來類似」。支援 Sketch MCP 工具集,包括 `get_document_info`、`get_layer_tree_summary`、`get_screenshot`、`get_design_assets`、`get_symbol_overrides` 以及目標性的 `run_code` 腳本。工作流程遵循嚴格的步驟:先提取參考規格、盤點既有 Sketch 內容、規劃圖層結構(偏好使用 Stacks 來對應彈性盒/網格佈局)、建立代碼標記與基底畫面,然後以由外而內的方式逐步建構佈局,並使用 `get_screenshot` 與參考截圖比對來驗證每個區域。完成條件透過 `references/validation.md` 定義的區域閘門(region gate)嚴格把關,並禁止過早宣稱完成。此技能適用於在 Sketch 中從頭設計新畫面、複製現有網頁或應用程式畫面,或修改既有設計以符合參考。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/madsouris/dsh-sketch/tree/HEAD/skills/sketch-design-from-reference

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Sketch MCP to Design

建立或調整 Sketch 設計以符合參考。此技能用於在 Sketch 中進行設計工作;反向流程是 sketch-design-to-code。

精確度優先

目標是與參考達到視覺一致——而非一個包含類似區塊的合理頁面。相似不等於完成。請勿在內容存在時就停止;直到並排螢幕截圖比較通過 references/validation.md 中的完成標準為止。

必要的 Sketch 指南

  • get_guide 搭配 topic: "mcp" — 永遠執行;MCP 前置條件、run_code 規則、錯誤處理與視覺驗證。
  • get_guide 搭配 topic: "use" — Sketch 編輯、堆疊、符號、樣式、覆寫、素材與原型製作。
  • get_guide 搭配 topic: "layout" — 在建立或重構框架、群組、堆疊、頁面放置、尺寸調整、固定或容器類型之前執行。

當任務需要時,可依需求提取指南子主題:troubleshooting、layout、styling、symbols、assets 和 prototyping。

前置條件

  • 啟用 MCP 並正在執行的 Sketch(設定 → 一般 → 允許 AI 工具與開啟的文件互動)。
  • 目標文件已開啟,或使用者希望您建立/使用新文件。
  • 參考資料可透過 URL、螢幕截圖或原始碼取得。
  • 範圍足夠明確以採取行動:整個頁面 vs. 單一框架、目標寬度、深色/淺色模式,以及文件中有多個候選項時的目標頁面/框架。

如果 MCP 無法使用,請停止並呼叫 get_guide 搭配 topic: "troubleshooting"。在 MCP 無法連接時,請勿憑記憶猜測佈局。

步驟

按順序執行以下步驟。主要流程應足夠應付一般工作;僅在步驟需要更多細節或範例時才載入參考文件。

步驟 1 — 確認上下文與參考

  1. 取得必要的指南。
  2. 使用 get_document_info 解析目標文件。
  3. 分類參考類型:
    • URL — 收集頁面標題、視埠寬度、DOM 結構、來源 HTML、連結或捆綁的 JavaScript/CSS(若可用)、計算後的色彩/字型、文案以及素材 URL。
    • 螢幕截圖 — 收集尺寸、區域、文字內容、對齊方式與主要色彩。
    • 程式碼 — 收集主題代碼、字型堆疊、間距尺度、元件名稱、內嵌 SVG 以及素材匯入。
  4. 提取精確度規格,並在進行任何佈局變更前,於目標寬度下擷取參考錨點截圖。該規格必須包含區域(由上至下)、逐字文案、色彩、字型排版、佈局寬度以及素材來源 — 請參閱 references/reference-extraction.md。

若要參考特定類型的提取方式,請閱讀 references/reference-extraction.md。關於比較與完成條件,請在步驟 5 之前閱讀 references/validation.md。

步驟 2 — 探索可重複使用的 Sketch 內容

在進行變更之前先進行檢查。從唯讀的 MCP 工具開始:

  1. 呼叫 get_document_info 以取得頁面、頂層框架/圖形、圖層數量與現有佈局候選項。
  2. 對候選框架或相關頁面呼叫 get_layer_tree_summary,以取得階層、ID、名稱、尺寸、文字片段、符號實例覆寫數量以及堆疊提示。
  3. 呼叫 get_design_assets 和 get_libraries 以取得可重複使用的符號/元件與庫素材。
  4. 僅在摘要未提供所需細節時,使用目標性的 run_code。

只有在確定現有框架對應到要求的設計時,才優先編輯現有框架。否則,建立一個新框架。

步驟 3 — 在畫像素之前先規劃結構

在繪製之前定義圖層計劃:

  • 頂層區域及其順序。
  • 父/子關係與兄弟群組。
  • 區域寬度、內容最大寬度、以及全出血 vs. 欄位內區段。
  • 固定/固定區域 vs. 可滾動內容。
  • 符號候選項、堆疊候選項、素材候選項以及可重複使用的堆疊樣式。

請勿套用預設頁面模板。必須匹配參考的資訊架構。

對於每個結構化區域,在繪製前決定 Sketch 堆疊模型:方向、間距、內距、對齊、尺寸調整、換行以及預期的視覺順序。使用堆疊來處理列、欄、導覽列、工具列、卡片、列表、表單、按鈕群組與重複內容,除非有特定理由需要該區域為自由形式。對於頁面層級放置、固定 chrome、疊加層、遮罩或真正自由形式的藝術創作,則使用手動座標。

步驟 4 — 建立代碼標記與基底框架

為背景、邊框、文字、品牌、淡化文字與重要表面建立或匹配文件色票/共享樣式。有目的地設定頁面/框架背景,並清除結構群組中意外的填色。有關符號細節,請呼叫 get_guide 搭配 topic: "symbols"。

使用參考中的值:計算後的 CSS、螢幕截圖中取樣的色彩,或程式碼代碼。有關樣式細節,請呼叫 get_guide 搭配 topic: "styling"。

步驟 5 — 逐步建構佈局

應用小型、可逆轉的 run_code 編輯。一個腳本應執行一個小動作。

絕對不要在一個腳本中建立整個頁面、頂層區域或多區塊佈局。不要在同一次執行中混合探測、建立、樣式設定與重新排序。保持腳本扁平:引導、依 ID 尋找目標、執行一項變更、記錄 JSON。避免深層輔助函式、巢狀 IIFE 以及長控制流程樹。

由外而內建構:

  1. 頁面框架與背景。
  2. 來自圖層計劃的頂層區域容器。
  3. 每個區域的堆疊設定,在詳細子項目之前。
  4. 以小型兄弟批次在各區域內放置文字、形狀與符號實例。
  5. 在其父層結構正確之後,處理固定/固定區域。

一次建構一個頂層區域。在每個區域的內容批次之後:

  1. 在參考錨點寬度下,使用 get_screenshot 對框架進行截圖。
  2. 將該區域頻段與參考錨點進行比較 — 使用 references/validation.md 中的分類法列出差異。
  3. 在開始下一個區域之前修復主要不匹配。

在結構性編輯之後,使用 get_layer_tree_summary 重新查詢或對框架進行截圖。有關安全地重新排序/重新指定父層的模式,請閱讀 references/editing-patterns.md。

步驟 6 — 符號、素材與覆寫

在繪製重複的一次性圖層群組之前,先使用現有的文件/庫符號。重複的 UI 通常應成為一個符號主體,包含實例與覆寫。

在繪製詳細形狀之前,對每個非文字視覺元素進行分類。將照片、螢幕截圖、插圖、複雜 SVG、產品圖像、品牌標誌、詳細圖示、漸層與雜訊作為 SVG/PNG/圖片素材匯出/匯入。僅在 Sketch 中重建簡單的 UI 基本元素、簡單的可編輯向量、分隔線、膠囊形狀與基本形狀。

對於圖示/標誌/圖片,首先使用簡單的佔位符建立佈局,然後在幾何形狀與堆疊順序穩定後再匯入/指派真實的圖片素材。對於重複的素材,偏好使用專用圖層上的符號圖片覆寫。

有關符號覆寫模式,請閱讀 references/symbols.md。有關匯入/匯出細節,請呼叫 get_guide 搭配 topic: "assets"。

步驟 7 — 僅進行目標性的修正

當使用者回報問題或螢幕截圖比較顯示不匹配時:

  1. 在變更前,使用 get_layer_tree_summary 或目標探測檢查當前圖層。
  2. 僅變更回報的屬性:一個框架值、文字樣式、色彩、圖層順序、堆疊屬性或覆寫。
  3. 重新截圖並確認子層數量未變更,除非刪除是有意為之。

如果佈局損毀或圖層遺失,請立即告知並要求使用者先復原/還原後再繼續。

步驟 8 — 最終驗證與交接

在完成標準通過之前,請勿宣稱完成 — 請參閱 references/validation.md → 完成標準。

  1. 在參考錨點寬度下,使用 get_screenshot 進行全框架截圖。
  2. 針對精確度規格中的每個頻段,對參考錨點截圖執行區域閘門。
  3. 如果仍有任何主要差異,請返回步驟 7 並迭代。請勿以「差不多」的佈局進行交接。
  4. 總結使用的符號、建立的代碼/樣式、目標畫板/框架名稱與 ID、已驗證的區域,以及任何剩餘的次要差異。
  5. 在任務完成之前,請勿執行 zoomToFitCanvas。

規則

特定於 Sketch → 設計的方向性規則。通用 MCP/腳本規則來自 get_guide 搭配 topic: "mcp",Sketch 內容規則來自 get_guide 搭配 topic: "use"。

  1. 修補,不要重建。如果內容存在,請修正框架、樣式、覆寫或順序,而不是刪除並重新建立主要區域。
  2. 在重新排序、重新指定父層、新增或刪除操作前後,記錄子層數量基準。
  3. 切勿使用 parent.layers = [...];使用 layer.index 進行重新排序,使用 child.parent = newParent 進行重新指定父層。
  4. 匹配參考的區域結構;相同的視覺內容應具有相同的父/子關係,除非有刻意理由需要偏離。
  5. 在每個有意義的批次之後進行截圖,並使用截圖差異來選擇下一個編輯。
  6. 結構化佈局預設使用堆疊。如果兄弟元素在參考中表現得像 flex、grid、list、form、nav 或 card 內容,則建立或保留 Sketch 堆疊,而不是手動放置每個子元素。
  7. 素材就是素材。不要將複雜的藝術作品、照片、螢幕截圖或品牌標誌重新繪製為低解析度的向量近似;應匯出/匯入或指派圖片/SVG 素材。
  8. 不猜測。不要從記憶或通用 UI 模式中發明佈局、文案、色彩、間距或素材。從參考中提取;如果某個值缺失,請重新獲取或詢問使用者。
  9. 始終使用參考錨點。將 Sketch 輸出與擷取的參考截圖進行比較——而不是您對頁面的回憶。
  10. 完成閘門。不要因為區塊存在或頁面「看起來相似」就停止。當 references/validation.md 的完成標準通過時才停止。

常見陷阱

  • 為修復一個小不匹配而重建整個頁面會浪費已調整好的工作,並引入新的錯誤。應根據截圖差異進行精確編輯。
  • 將圖片直接放置在符號實例上可能會破壞階層或在 API 中失敗。將圖片圖層放在主體中,並透過實例層級的圖片覆寫來驅動。
  • 跳過截圖會隱藏佈局、排序與色彩錯誤。每個批次都應進行截圖。
  • 使用 parent.layers = [...] 重新排序可能會刪除子層或複製物件 ID。應改用安全的重新排序模式。
  • 如果弄錯索引與打包方向,堆疊順序可能會看起來反轉。使用 get_guide 搭配 topic: "layout" 並透過截圖驗證。
  • 整個頁面或區域的腳本難以驗證、除錯與復原。應按區域、堆疊設定與小型兄弟批次進行分割。
  • 使用手動框架建立的結構化佈局在間距或順序變更時會偏移。使用 Sketch 堆疊來處理行、列、列表、表單、導覽、卡片與重複區域。
  • 將複雜藝術作品重建為基本形狀會產生低品質的近似。應匯出/匯入 SVG/PNG 或使用圖片覆寫;保留形狀給簡單的 UI 基本元素。
  • 僅首次繪製的頁面截圖可能會遺漏延遲載入圖片與觸發滾動的 UI 狀態。使用瀏覽器或代理工具,滾動以觸發內容,然後擷取目標視埠。
  • 過早完成:代理添加頁首/主體/頁尾並使用通用樣式後就停止。執行區域閘門與完成標準;持續修復直到主要差異消失。
  • 即興創作文案與色彩:改寫標題、Lorem Ipsum 風格的填充文字,或預設的灰色/藍色而非提取的值。逐字使用精確度規格;從參考中重新取樣色彩。
  • 佔位符持續存在:灰色方塊被留作「標誌」或「英雄圖片」。在交接前匯出/匯入真實素材,除非使用者要求佔位符。

故障排除

對於橋接/工具呼叫失敗、解析器錯誤、MCP 連線問題或截圖失敗,請在重試前呼叫 get_guide 搭配 topic: "troubleshooting"。

對於文件操作失敗:

  • 佈局/堆疊/順序問題 → get_guide 搭配 topic: "layout"。
  • 符號覆寫問題 → get_guide 搭配 topic: "symbols"。
  • 匯出/匯入/圖片問題 → get_guide 搭配 topic: "assets"。

設計建構症狀

  • 腳本執行後子層數量減少:告知使用者復原,然後檢查操作。不要重複執行批量圖層指派。
  • get_screenshot 為空或錯誤:重新解析框架/圖層 ID,如有需要則對頁面或父框架進行截圖。
  • 符號覆寫無效:重新獲取 get_symbol_overrides,使用 commonOverrideIDPrefix + '_' + property 重建覆寫 ID,然後進行截圖。
  • 文字在行堆疊中重疊:檢查子層順序與間距;一次修正一個堆疊屬性或子層索引。

參考資料

相關技能