mcpField
G
generate-ui-from-brand

generate-ui-from-brand

github.com/dembrandt设计与 UI174885 次安装1 周前更新
代码仓库

关于 generate-ui-from-brand

这项设计技能可将网站 URL 或现有 DESIGN.md 转为可执行的 UI 规范。它提取并规范化设计令牌,落实 UX 与无障碍决策,并可生成令牌文件、审查报告或组件布局。

主要功能

  1. 01从 URL 或 DESIGN.md 提取设计令牌
  2. 02规范化颜色、字体、间距和圆角令牌
  3. 03落实视觉层级与无障碍检查
  4. 04输出 CSS 令牌、UX 审查或布局
  5. 05支持多个品牌共享令牌

适用场景

  1. 01根据品牌网站创建 UI 规范
  2. 02检查对比度和视觉层级
  3. 03用一致的设计令牌生成布局

MCP 相关

有 Dembrandt MCP 时,该技能会调用其异步提取工具,并轮询任务状态以获取结果。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dembrandt/dembrandt-skills --skill generate-ui-from-brand

安装后在 Claude Code 中输入/generate-ui-from-brand确认已加载。

详细介绍

generate-ui-from-brand

类型: 流水线 / 编排器
输入: URL 或现有的 DESIGN.md
输出: 已明确决策、可执行的 UI 规范


步骤 1 — 提取

如果提供了 URL,且 Dembrandt MCP 可用:

所有 MCP 提取工具都是异步的 — 它们会立即返回 job_id。轮询 get_job_status,直到 status 为 "completed",然后读取 result。

{ job_id } = get_design_tokens({ url })
{ result } = get_job_status({ job_id })   // repeat until status === "completed"

按顺序运行以下命令(每次提取都会启动一个浏览器):

get_design_tokens, get_color_palette, get_typography, get_component_styles, get_spacing

如果 Dembrandt MCP 不可用,请运行 CLI:

npx dembrandt <url> --design-md --crawl 3

如果 DESIGN.md 已存在: 直接解析,跳过提取。


步骤 2 — 规范化令牌

不要直接使用提取的原始值。先将它们映射到语义系统。

颜色

识别每种提取颜色的角色:

角色令牌识别方法
color-primary主品牌色用于主要按钮、链接和关键交互元素
color-secondary辅助品牌色用于次要操作、强调元素
color-surface背景页面或卡片背景
color-surface-raised浮起表面卡片、面板、模态框
color-border边框 / 分隔线输入框边框、分隔符
color-text主要文本正文
color-text-secondary次要文本标签、元数据、说明文字
color-error错误状态红色 — 不得指定给其他角色
color-warning警告状态橙色 / 琥珀色 — 不得指定给其他角色
color-success成功状态绿色 — 不得指定给其他角色

决策规则: 如果提取的调色板中有超过 2 种品牌色都可能用作 color-primary,选择在交互元素上使用最多的一种。

字体排印

将提取的字号映射到一个级别。检查比例是否协调 — 如果字号不遵循一致的比例,将其四舍五入到最接近的模块化级别(基准为 16px,建议比例为 1.25)。

令牌最小字号角色
text-base16px正文 — 不得小于 16px
text-sm14px标签、说明文字 — 谨慎使用
text-lg20px引导段落
text-h425px分区小标题
text-h331px分区标题
text-h239px页面小标题
text-h149px页面标题
text-display61px仅用于主视觉区 / 落地页

决策规则: 如果提取的正文字号小于 16px,则覆盖为 16px。

间距

根据最常见的小边距 / 内边距值,确定基础间距单位。由此推导一个级别:

base = extracted smallest recurring value (usually 4px or 8px)
scale = base × 1, 2, 3, 4, 6, 8, 12, 16
边框圆角

提取交互元素(按钮、输入框)上最常用的圆角值。该值将设为 --radius-button,并统一应用于所有按钮,不论其变体如何。


步骤 3 — 应用 UX 决策

使用规范化后的令牌,明确做出以下决策。不要将这些事项留作待定:

视觉层级
  • 确定所构建 UI 的唯一主要操作
  • 仅将 color-primary 分配给该操作
  • 所有其他操作使用中性或描边样式
  • 为所有交互元素应用 cursor: pointer
格式塔分组
  • 定义相关元素之间的间距(紧凑:space-2),以及组与组之间的间距(宽松:space-6 或 space-8)
  • 确认相关控件将在布局中彼此靠近
无障碍(WCAG 2.2 AA)

对规范化后的令牌进行对比度检查:

  • color-text 在 color-surface 上:必须 ≥ 4.5:1
  • color-text-secondary 在 color-surface 上:必须 ≥ 4.5:1
  • 白色 / 表面背景上的 color-primary(按钮标签):必须 ≥ 4.5:1

如果有任何一项不达标,应加深或调浅令牌颜色以达到阈值。记录调整情况。

错误 / 状态颜色
  • 确认 color-error 为红色,且仅用于错误
  • 确认 color-warning 为橙色 / 琥珀色,且仅用于警告
  • 如果品牌使用橙色作为主色,则不能同时将其用作警告色 — 必须为警告状态定义一种不同的琥珀色

步骤 4 — 输出 UI 规范

生成具体、可直接复制粘贴的内容。选择适合请求的格式:

设计令牌文件(CSS)
:root {
  /* Colours */
  --color-primary:          <value>;
  --color-secondary:        <value>;
  --color-surface:          <value>;
  --color-surface-raised:   <value>;
  --color-border:           <value>;
  --color-text:             <value>;
  --color-text-secondary:   <value>;
  --color-error:            <value>;
  --color-warning:          <value>;
  --color-success:          <value>;

  /* Typography */
  --font-sans:    <extracted font family>;
  --text-base:    1rem;
  --text-sm:      0.875rem;
  --text-lg:      1.25rem;
  --text-h4:      1.563rem;
  --text-h3:      1.938rem;
  --text-h2:      2.438rem;
  --text-h1:      3.063rem;

  /* Spacing */
  --space-1:  <base>px;
  --space-2:  <base×2>px;
  --space-4:  <base×4>px;
  --space-6:  <base×6>px;
  --space-8:  <base×8>px;

  /* Borders */
  --radius-button:  <extracted>px;
  --radius-card:    <extracted or radius-button + 2>px;

  /* Elevation */
  --shadow-card:   0 1px 3px rgba(0,0,0,.10), 0 1px 2px rgba(0,0,0,.06);
  --shadow-modal:  0 10px 15px rgba(0,0,0,.08), 0 4px 6px rgba(0,0,0,.05);
}
UX 审核(审核现有 UI 时)
CONTRAST ISSUES
  - color-text-secondary on color-surface: X.X:1 (required 4.5:1) → fix: darken to #...

HIERARCHY ISSUES
  - 3 primary buttons on same screen → reduce to 1 primary, 2 secondary

CONSISTENCY ISSUES
  - Button radius varies (4px, 8px, 12px) → standardize to --radius-button: 8px

MISSING STATES
  - No disabled state defined for inputs
  - No error state for form fields

FONT SIZE VIOLATIONS
  - Caption text at 12px → minimum 14px
组件结构(生成布局时)
Page layout:
  Header (fixed, 56px)
    Logo | Nav | [Global controls: small type]
  
  Main
    Hero section
      H1 (display scale) + lead text + primary CTA (color-primary, full)
    
    Feature grid (3-col)
      Card (shadow-card, radius-card) × 3
        Icon + H4 + body text
    
  Footer
    Links (text-sm, color-text-secondary)
    Language/currency selector (text-sm)

Primary action: CTA button in hero
Secondary actions: nav links, card CTAs (outlined)
Error states: inline, adjacent to field, red text + icon

为多个品牌运行此流程(令牌架构与治理)

通过一个流水线构建多个品牌时,不要把每个品牌都当作全新项目。**一个系统,多种外观:**每个品牌都基于同一套语义令牌生成;每个品牌只改变基础令牌(颜色、字体、圆角)。一处修复,处处生效。

**定期整合——令牌系统会逐渐偏离。**随着品牌增多、时间推移,令牌会分叉,临时值会不断增加,各个系统也会逐渐分化。请安排定期整合:

  • 重新提取并比较线上网站(使用 Dembrandt 的提取与 drift/compute-drift 工具,同时进行直观检查,并相互对比、对照当前设计趋势与最佳实践)。
  • 将差异纳入共享语义层,统一本应共用的内容;真正具有品牌特色的值则仅保留为基础令牌覆盖值。
  • **融入明确的设计观点。**整合不只是机械地去重——还要加入 UX / 视觉设计方面的判断,并明确各产品未来的发展方向,而不只是沿袭现状。

**设计时期冲突时,以较新的设计为准。**经过多年开发的产品会包含不同设计世代的页面。最新的页面和组件最能体现当前设计意图——将旧设计迁移为新设计;绝不要将不同世代折中平均成一种妥协风格。较新设计只是默认依据,并非最终结论:最新的界面也可能是未经审核的个例。将某种风格定为规范,或将旧风格标记为弃用前,请先与用户确认。

**在改动时弃用,而非一次性全面替换。**维护一份简短的弃用样式列表——旧圆角、旧阴影、已淘汰的按钮变体。当工作涉及旧世代页面时,在同一轮改动中将其升级为当前样式。每次改动都让产品更接近统一的系统,无需将重写项目列入路线图。

**出现两三次,就形成一种模式。**当相同的视觉处理独立出现在 2–3 个地方时,它就不再是巧合——为其命名,将其令牌化,并让它在各处都可用。将其提升为通用模式,比再手工复制一次更省力。提升后,该模式便属于设计语言:新组件可以直接使用或加以调整,只要调整后的效果仍明显忠于原始模式。

跟踪功能使用情况,弃用不再需要的内容。同样的原则也适用于功能,而不只是令牌:为实际使用情况添加埋点,并弃用实际使用率很低的功能 / 组件,不要永远维护它们。只有持续精简,共享系统才能保持健康——每个未使用的组件都是未来可能产生偏差的隐患,也会增加每次后续改动的成本。


移交前审核清单

  • 所有令牌都使用语义名称,而非按值命名(color-primary,而非 color-blue-600)
  • 所有正文文本均 ≥ 16px
  • 已验证所有文本 / 背景组合的对比度
  • 每个视图只有一个主要按钮
  • 所有按钮共用 --radius-button
  • 所有交互元素都设置了 cursor: pointer
  • 错误颜色仅用于错误
  • 警告颜色(橙色)仅用于警告
  • 间距均由统一的基础单位推导而来

评论

支持 Markdown