OpenDesign 最佳实践指南
开源本地优先 AI 设计工具 — 从入门到精通的完整指南
🏗️ 架构理解
OpenDesign 由三个核心轴组成,理解它们是使用好这个工具的前提:
| 轴 | 作用域 | 示例 |
|---|---|---|
skills/ |
产出物形状 | saas-landing、dashboard、pricing-page |
design-systems/ |
品牌视觉语言 | linear-app、apple、notion(9 段 DESIGN.md) |
craft/ |
通用设计知识 | 字间距规则、反 AI 模板、色彩层级 |
DESIGN.md 告诉 Agent 用什么颜色和字体,craft/ 告诉 Agent 优秀设计师会应用的通用规则——例如无论什么品牌,ALL CAPS 都需要 ≥0.06em 的字间距。
关键目录结构
open-design-main/
├── apps/
│ ├── daemon/ # 守护进程(linter、critique 系统)
│ ├── web/ # Web 前端界面
│ └── desktop/ # Electron 桌面壳
├── skills/ # 31 个技能(产出物类型)
├── design-systems/ # 72 个设计系统
├── craft/ # 通用设计规范(11 个文件)
├── plugins/ # 插件系统
└── .od/ # 运行时数据(SQLite + 配置)
⚙️ 环境配置
Node.js 版本要求
推荐启动方式
已配置好的 start.bat 位于 D:\01_APP\OpenDesgin\open-design-main\start.bat,已内置 Node.js 24 路径切换。双击即可启动。
# 手动启动命令
export PATH="/d/05_Coding/.env/NodeJS24:$PATH"
cd "/d/01_APP/OpenDesgin/open-design-main"
pnpm tools-dev start web --daemon-port 24729 --web-port 20026
数据目录
| 文件/目录 | 内容 |
|---|---|
.od/app-config.json | 应用配置(agent、designSystem) |
.od/app.sqlite | 本地数据库 |
.od/artifacts/ | 生成的设计产物 |
.od/projects/ | 项目数据 |
.od/connectors/ | 连接器配置 |
🔄 标准设计流程
从需求到最终产出,遵循以下 6 步工作流:
明确设计 Brief
在 OpenDesign 中输入清晰的设计需求。OpenDesign 会弹出交互式问卷,帮助你澄清需求后再让模型开始生成。这一步决定了产出质量的天花板。
选择 Design System
从 72 个预设设计系统中选择一个作为视觉基调。推荐优先尝试:linear-app(现代 SaaS)、apple(极简)、notion(干净文档风)、default(通用基线)。
选择 Skill(产出物类型)
根据需求选择对应的 Skill:saas-landing(落地页)、dashboard(数据看板)、pricing-page(定价页)、blog-post(博客文章)等。31 个 Skill 覆盖网页、桌面、移动原型、幻灯片等。
Agent 生成 + Critique 迭代
OpenDesign 内置了 Critique(审查)系统,会自动对产出进行多轮审查和修正。无需手动干预,等待审查完成即可。通常 2-3 轮后产出质量会显著提升。
沙盒预览 + 手动调整
在内置的沙盒预览中检查产出。通过 Comment Mode 可以在特定位置添加批注,让 Agent 做增量调整。
导出 / 集成到项目
导出为 HTML、PDF、PPTX,或将代码直接集成到你的前端项目中。推荐用 Claude Code 将生成的组件做代码审查后集成。
💬 Prompt 技巧
好的 Brief 公式
[目标] + [目标用户] + [关键功能] + [参考产品] + [设计系统偏好]
示例:
"为一个面向中小企业的 SaaS 发票工具设计落地页,
核心功能是自动发票生成和 expense 追踪,
参考产品是 Stripe 的简洁感,
使用 Linear 风格的设计系统。"
Prompt 避坑
❌ 模糊描述
"做一个好看的落地页" — Agent 会回退到默认模板,产出 AI 模板化设计。
P0 避免❌ 堆砌功能
"包含 hero、features、pricing、testimonials、FAQ、CTA、footer" — 标准 AI 模板骨架,毫无差异化。
P0 避免✅ 指定参考
"参考 Linear.app 的导航结构和 Apple 的色彩克制感" — 给出具体参考产品,Agent 会继承可交互的语法。
推荐✅ 指定差异化
"不要用标准的 Hero→Features→Pricing 序列,用一个全屏的产品 demo 作为 hero" — 主动打破模板。
推荐🎨 设计系统选择
OpenDesign 内置了 72 个品牌级设计系统,每个都有完整的 9 段 DESIGN.md 规范。以下是按场景推荐的精选列表:
| 场景 | 推荐 Design System | 特点 |
|---|---|---|
| SaaS 产品 | linear-app、vercel、stripe | 现代、克制、专业 |
| 数据看板 | dashboard、application | 高密度信息、功能优先 |
| 营销页面 | creative、bold、dramatic | 视觉冲击力强 |
| 文档/博客 | notion、editorial、clean | 阅读体验优先 |
| 电商 | apple、airbnb、canva | 干净、信任感 |
| 创意/实验 | brutalism、doodle、cosmic | 差异化、个性 |
DESIGN.md 文件定义了该品牌的色彩、字体、圆角、阴影、动画等全部 Design Tokens。Agent 会严格遵循这些规范。
🚫 反 AI 模板化规范
OpenDesign 内置了 craft/anti-ai-slop.md,这是保证产出不像"AI 生成的"的核心规范。以下是七大重罪(P0 必须修复):
禁止使用 #6366f1、#4f46e5、#4338ca、#3730a3、#8b5cf6、#7c3aed、#a855f7。必须使用 DESIGN.md 提供的 --accent 变量。Indigo 是 AI 最明显的标志。
禁止 purple→blue、blue→cyan、indigo→pink 渐变。纯色表面 + 有节奏的排版永远胜过渐变。
禁止在 <h*>、<button>、<li> 中使用 ✨🚀🎯⚡🔥💡。使用 1.6-1.8px 描边的单色 SVG 图标。
h1/h2 必须使用 var(--font-display),不能硬编码 Inter / Roboto / system-ui。
这是经典的"AI 看板卡片"形状。要么去掉圆角,要么去掉左边框。
禁止出现 "10× faster"、"99.9% uptime" 等无来源数据。要么引用真实数据源,要么标注为占位符。
禁止 lorem ipsum、feature one/two/three、placeholder text。空白的 section 应该用组合设计来解决,而不是编造文字。
如何注入"灵魂"
目标是 ~80% 成熟模式 + ~20% 差异化选择。这 20% 应该体现在:
- 一个大胆的视觉动作 — 一个排版选择、一个色彩决定、一个意外的比例
- 声音和微文案 — "Start tracking" 比 "Get started" 更有产品感
- 一个用户会记住的微交互 — 按钮按下移动 2px、数字递增动画
- 一个只有用过产品的人才会放的细节 — 键盘快捷键提示、产品特定的状态徽章
📐 Craft 设计规范
OpenDesign 的 craft/ 目录包含 11 个通用设计规范文件,覆盖 UI 设计的各个维度:
| 规范 | 内容 | 适用场景 |
|---|---|---|
typography.md | 字体、字号、字重、行高 | 所有含文本的产出 |
typography-hierarchy.md | 排版层级 | 有明确入口和节奏感的页面 |
typography-hierarchy-editorial.md | 编辑级排版 | 博客、文档、电子指南 |
color.md | 色彩使用规范 | 所有含样式的产出 |
anti-ai-slop.md | 反 AI 模板化规则 | 营销页、落地页、幻灯片 |
state-coverage.md | UI 状态覆盖 | 看板、表单、列表、表格 |
animation-discipline.md | 动画规范 | 移动端、多屏流程、微交互 |
accessibility-baseline.md | 无障碍基线 | 所有交互式 UI |
form-validation.md | 表单验证 | 注册、登录、设置页 |
laws-of-ux.md | UX 认知法则 | 定价页、看板、引导流程 |
rtl-and-bidi.md | RTL/BiDi 布局 | 含阿拉伯语/希伯来语的页面 |
关键规则精选
排版
- ALL CAPS 文本需要 ≥
0.06em的 letter-spacing - 保持三种字重节奏(regular / medium / bold),不要创造第四种
- Display 文本使用
var(--font-display),不要硬编码字体
色彩
- 每个屏幕最多 2 次 使用
var(--accent)强调色 - 不要在
:root外使用超过 ~12 个原始 hex 值 — 使用 Design Tokens - 不要用颜色单独传递信息(需配合图标或文字标签)
加载状态
- < 300ms:不需要加载指示器
- 300ms - 2s:骨架屏
- 2s - 10s:带标签的 spinner
- 10s - 60s:确定进度条 + 取消按钮
- > 60s:停止并给出错误/重试选项
触控区域
- 最小触控区域:24×24 CSS px(WCAG 2.2 AA 标准)
- iOS 推荐:44×44 pt
- Material 3 推荐:48×48 dp
🧠 UX 认知法则
OpenDesign 内置了基于原始研究文献的 UX 法则,这些法则决定了 UI 的组合方式(放什么、放多少、放哪里):
感知与视觉分组
- 接近法则 (Proximity) — 组内间距 8-12px,组间间距 32-48px。均匀间距会让什么都不像一组。
- 相似法则 (Similarity) — 等效元素必须有相同样式(每行列表相同 class、所有次要按钮相同)。
- 共同区域 (Common Region) — 内部 padding ≥ 16px,用边框 + 微着色背景区分。页面上到处都是边框会消弱信号。
- 选择性注意 (Selective Attention) — 为单一目标动作保留最强视觉对比,让辅助内容退后。
- 冯·雷斯托夫效应 (Von Restorff) — 推荐定价层、活跃导航项必须在视觉上与众不同。
决策制定
- 希克定律 (Hick's Law) — 决策时间随选项数量对数增长。任何决策屏幕限制 3-5 个可见主选项。
- 选择过载 (Choice Overload) — 定价页 3-4 个层级,恰好一个标记为"推荐"。设置面板 ≤ 5 个命名分组。
- 锚定效应 (Anchoring) — 用户看到的第一个数字会重新加权后续所有数字。推荐定价层放在锚定比较的位置。
- 帕累托法则 (80/20) — 识别 2-3 个驱动主要用户路径的核心动作,视觉上强调它们。
记忆与学习
- 米勒定律 (Miller's Law) — 工作记忆可靠地容纳约 4 个项目。设置页分 "Account / Notifications / Privacy / Billing / Danger zone" 五个分组,优于 30 个开关的平铺列表。
- 峰终定律 (Peak-End Rule) — 体验记忆由情感峰值和结尾主导,而非平均值。在流程结束时做"庆祝"成功状态,中间步骤保持平静。
- 蔡加尼克效应 (Zeigarnik Effect) — 未完成的任务会产生拉回完成的张力。用进度条("3 of 5 steps")引导完成。保留用于真正有益的引导流程,勿用于暗模式。
交互
- 菲茨定律 (Fitts's Law) — 目标越大越近越快。高频操作放在自然拇指弧度内(移动端)。
- 目标梯度效应 (Goal-Gradient) — 离目标越近动力越强。展示已完成的先决条件("saved profile"、"imported team")作为进度。
🔧 Skills 系统
每个 Skill 对应一种产出物类型。OpenDesign v0.5.0 包含 31 个 Skills:
落地页
saas-landing、landing-page、product-launch
定价页
pricing-page
数据看板
dashboard、analytics-dashboard
博客/文档
blog-post、docs-page、digital-eguide
幻灯片
slide-deck、pitch-deck
移动端
mobile-app、mobile-flow
如何 Craft 被注入
每个 Skill 的 front-matter 中可以声明需要的 Craft 规范:
od:
craft:
requires: [typography, color, anti-ai-slop]
这样只有声明的规范会被注入到 Agent 的 system prompt 中,避免不相关的内容浪费 token。
🤖 Agent 配置
OpenDesign 不自带 Agent,而是桥接到你已有的 AI 编码 CLI。
当前配置
你的 .od/app-config.json 已配置为:
{
"agent": "claude",
"designSystem": "default"
}
推荐的 Claude Code + Codex 双 Agent 协作
- Claude Code:定义项目的
CLAUDE.md设计系统 - OpenDesign:根据 Brief 生成初始 UI 组件/页面
- Claude Code:将组件集成到项目中,做代码审查
- 浏览器预览:在真实浏览器中检查效果
- Codex:根据截图做增量调整(多模态截图修正)
- Claude Code:最终测试和部署
📦 导出与部署
导出格式
| 格式 | 用途 | 推荐场景 |
|---|---|---|
| HTML | 完整代码 | 集成到项目、二次开发 |
| 静态文档 | 设计评审、交付文档 | |
| PPTX | 幻灯片 | 演示汇报、Pitch Deck |
集成到项目的最佳实践
- 在 OpenDesign 中生成并审查设计
- 导出 HTML 代码
- 用 Claude Code 的
code-reviewerAgent 审查生成的代码 - 修复类型安全和可访问性问题
- 集成到项目组件库
- 编写测试覆盖新增组件
🔍 故障排查
启动失败 "web did not expose status in time"
原因:Node.js 版本不兼容
解决:确保使用 Node.js 24.x,不要使用 25+
端口被占用
检查:用 status.bat 检查端口状态
解决:指定新端口或停止占用进程
依赖安装超时
原因:Electron 下载慢(85MB)
解决:使用 npx pnpm@10.33.2 install 延长超时
生成质量差
原因:Brief 模糊 / 设计系统不合适
解决:参考本页 Prompt 技巧和设计系统推荐
快速命令
# 检查服务状态
D:\01_APP\OpenDesgin\open-design-main\status.bat
# 停止服务(找到并杀死进程)
ps aux | grep "open-design\|tools-dev"
kill <pid>
# 检查端口是否空闲
node -e "const net=require('net'); [20026,24729].forEach(p=>{const s=net.createServer(); s.on('error',e=>console.log('Port '+p+': OCCUPIED')); s.listen(p,'127.0.0.1',()=>{console.log('Port '+p+': FREE');s.close();});});"
📚 参考资料
- OpenDesign GitHub 仓库
- OpenDesign 官方网站
- OpenDesign Guide — 完整使用指南
- OpenDesign Tutorials — 官方教程集合
- Claude Design vs Open Design 对比 (WotAI)
- 3 步构建开源 AI 设计系统 (APIYI)
- Open Design in 20 Minutes — 完整 Setup + Demo (YouTube)
- 开源版 Claude Design?Open Design 完整体验
- Craft 规范来源:refero_skill (MIT License, Refero Design)
D:\01_APP\OpenDesgin\open-design-main,Node.js 24.13.0 存放在 D:\05_Coding\.env\NodeJS24\。