OpenPencil 上手:把 AI 设计稿放进工程流水线

作者:Administrator 发布时间: 2026-05-18 阅读量:3

OpenPencil 最值得看的地方,不是“输入一句话生成 UI”,而是它把设计文件往代码工程里又推了一步。

过去几年,AI 生成界面大多停在两个端点:要么是聊天框里吐一段 React 组件,要么是设计工具里生成一张看起来挺像样的稿子。前者容易脱离视觉系统,后者又很难进入 Git、CLI、MCP、自动化流水线。OpenPencil 想卡在中间:设计仍然在无限画布上发生,但产物是 JSON 化、可 diff、可被 Agent 修改、也能导出多端代码的 .op 文件。

这不是 Figma 的简单平替,也不是又一个“AI 做网页”的演示项目。它真正有意思的点在于:设计开始变成一种可以被编排、被审查、被版本管理的工程资产。

别先问能不能替代 Figma

拿 OpenPencil 和 Figma 正面硬比,很容易跑偏。Figma 强在成熟协作、生态插件、设计系统、评论交付和团队流程,OpenPencil 现在显然不是要在这些维度上立刻硬刚。

它更像一套 AI-native 的设计实验台:

  • 设计稿不是黑盒二进制,而是 .op JSON 文档。
  • 画布不只是给人拖拽,也能让 Agent 读写节点。
  • CLI 可以批量创建、插入、导入、导出设计。
  • MCP Server 允许 Claude Code、Codex、Gemini CLI、OpenCode、Kiro、Copilot 这类工具直接操作设计文档。
  • 同一份设计可以导出 React + Tailwind、HTML + CSS、Vue、Svelte、Flutter、SwiftUI、Jetpack Compose、React Native 等目标。

换句话说,它把“设计工具”拆成了三层:画布、人机交互界面、可编程设计引擎。普通用户看到的是画布;开发者真正该关注的是后两层。

Prompt to Canvas 只是入口,不是终点

OpenPencil 的第一个爽点当然是 Prompt to Canvas:描述一个 SaaS Landing Page、后台仪表盘、移动端设置页,它会在无限画布上流式生成矩形、文本、图标、布局和样式。

一个典型提示词可以这么写:

TEXT
Create a modern SaaS landing page for an AI observability product. Include hero, metrics strip, feature cards, integration logos, pricing, FAQ and footer. Use a calm blue-gray palette, strong spacing, readable typography, and avoid generic purple gradients.

但这个入口不能被神化。AI 生成 UI 最大的问题从来不是“画不出来”,而是太容易画得像:大圆角、紫色渐变、三张卡片、假图标、假数据,一眼模板味。

OpenPencil 比较聪明的地方,是没有把这件事只交给一个大模型一口气憋完。它引入 Orchestrator,把复杂页面按空间区域拆成子任务;Concurrent Agent Teams 让多个 Agent 同时处理 hero、feature、footer、pricing 等区块;Style Guides 再给视觉语言加约束。这样做的意义不是炫技,而是降低“一坨 AI UI”失控的概率。

对真实项目来说,Prompt 最好别写成一句“做个漂亮页面”。你要把业务信息、信息层级、组件约束和不要什么写清楚。比如:

TEXT
Design a compact admin dashboard for a self-hosted email service. The first screen must show domain health, delivery rate, suppression list, queue status and recent alerts. Prefer dense enterprise layout. Avoid playful illustrations, glassmorphism and oversized hero sections. Use table-first layout and keep all critical controls above the fold.

这类提示词更像产品设计 brief,而不是抽盲盒。

快速安装:先跑起来,再谈生产化

如果只想本机体验,桌面客户端最省事。

macOS 可以用 Homebrew:

BASH
brew tap zseven-w/openpencil brew install --cask openpencil

Windows 可以用 Scoop:

POWERSHELL
scoop bucket add openpencil https://github.com/zseven-w/scoop-openpencil scoop install openpencil

Linux 和 Windows 也可以直接去 GitHub Releases 下载 AppImage、deb 或 exe。

如果你更关心 CLI 和工程化,可以装 op 命令:

BASH
npm install -g @zseven-w/openpencil

常用命令大概是这样:

BASH
op start op design @landing.txt op insert '{"type":"RECT"}' op import:figma design.fig cat design.dsl | op design -

op 支持 inline 字符串、@filepath 和 stdin 三种输入方式。这个设计很重要,因为它意味着 OpenPencil 不必永远被困在 GUI 里。你可以把设计任务放进脚本、CI、Agent 工作流里跑。

如果要从源码开发,需要 Bun 和 Node.js:

BASH
git clone https://github.com/ZSeven-W/openpencil.git cd openpencil bun install bun --bun run dev

桌面模式:

BASH
bun run electron:dev

项目使用 Bun monorepo,核心技术栈包括 React、TanStack Start、Tailwind CSS、CanvasKit/Skia WASM、Electron、Zustand、Vercel AI SDK 和 TypeScript。它不是一个薄薄的 demo,仓库里确实已经按 Web、Desktop、CLI、packages 拆了不少工程层。

Docker 适合试服务端,但别裸奔

OpenPencil 提供多种 Docker 镜像。最轻量的是 Web 版:

BASH
docker run -d -p 3000:3000 ghcr.io/zseven-w/openpencil:latest

如果要带 Claude Code、Codex、OpenCode、Copilot、Gemini CLI 等 AI CLI,还有对应镜像和 full 镜像。这里要提醒一句:带 AI CLI 的镜像通常牵涉 OAuth 登录、模型凭证、会话持久化,别随便把 3000 端口直接暴露到公网。

Claude 版的思路是先持久化登录会话:

BASH
docker volume create openpencil-claude-auth docker run -it --rm \ -v openpencil-claude-auth:/root/.claude \ ghcr.io/zseven-w/openpencil-claude:latest claude login

再启动服务:

BASH
docker run -d -p 127.0.0.1:3000:3000 \ -v openpencil-claude-auth:/root/.claude \ ghcr.io/zseven-w/openpencil-claude:latest

注意这里把端口绑定到 127.0.0.1。如果要远程访问,建议走 Tailscale、WireGuard、反向代理认证或 Zero Trust,而不是直接 -p 3000:3000 扔到公网。

顺手提一嘴,如果你要长期跑 OpenPencil Web、MCP Server、AI CLI 登录态和设计实验环境,最好单独用一台干净云服务器隔离,不要跟生产数据库、主站后台混在一起。雨云这类云服务器适合拿来做这种 Agent/设计工具试验机,小规格先跑,验证完再扩。

给 AI 设计实验环境留一台干净机器
把 OpenPencil、MCP Server、AI CLI 登录态和临时预览服务放在独立云服务器里,权限边界比混在生产机上清楚得多。
查看雨云服务器方案 →

.op 文件:Design-as-Code 的核心

OpenPencil 的关键产物是 .op 文件。它本质上是 JSON:节点、页面、变量、布局、文本、样式都可以结构化保存。

这比“导出一张图”更接近工程资产。因为 JSON 能做几件事:

  • 进 Git,保留变更历史。
  • 做 diff,知道改了哪个节点、哪个变量、哪个页面。
  • 让 Agent 读取局部节点,而不是整张截图。
  • 通过 CLI 批量修改节点和变量。
  • 从同一份设计导出不同端的代码。

一个团队可以把 OpenPencil 放进这样的流程里:

TEXT
产品 brief ↓ OpenPencil 生成初稿 .op ↓ 设计师在画布上调整信息层级和视觉系统 ↓ Agent 通过 MCP 做局部修改和批量补齐 ↓ Git review .op diff ↓ 导出 React + Tailwind 或其他目标代码 ↓ 前端接入真实数据、状态、权限和边界情况

这里最重要的是别把导出代码当成最终代码。AI 设计工具能省掉大量初稿和样式搭骨架的时间,但真实产品还要接数据、处理错误态、空态、权限态、移动端、可访问性和性能。OpenPencil 更适合把 0 到 0.6 的设计/前端骨架拉快,而不是替你承担最后的工程判断。

MCP Server:让终端里的 Agent 也能改设计

OpenPencil 内置 pen-mcp,支持 stdio 和 streamable HTTP transport,默认 HTTP 端点是:

TEXT
http://localhost:3100/mcp

这意味着 Claude Code、Codex、Gemini CLI、OpenCode、Kiro、Copilot 等 MCP 兼容工具,可以通过工具调用读取、创建、修改 .op 文件。

这层能力比“AI 在画布里聊天”更有想象力。因为设计任务可以进入 Coding Agent 的上下文:

  • 根据现有 React 页面反推设计结构。
  • 读取 .op 文件,修改某个 section 的 spacing 和 token。
  • 把产品文档里的字段补进表单设计。
  • 批量生成多语言落地页初稿。
  • 从设计变量导出 CSS custom properties。
  • 让代码审查同时看到 UI 结构变更。

但 MCP 也有风险。让 Agent 改设计文件,最好从低风险目录开始,不要一上来给整个项目写权限。比较稳的做法是:

TEXT
/design-lab drafts/ approved/ exports/

Agent 只能在 drafts 里生成和修改;进入 approved 前由设计师或前端负责人 review;exports 生成后再进入业务代码仓库。这样能避免“AI 顺手把设计系统改坏了”。

代码导出:能用,但别幻想一键上线

OpenPencil 支持把同一份 .op 导出到多个目标:React + Tailwind、HTML + CSS、Vue、Svelte、Flutter、SwiftUI、Jetpack Compose、React Native。

这对原型、落地页、后台页面、内部工具很有价值。尤其是那些视觉不复杂、信息结构清楚、组件边界明确的页面,AI 先生成结构,前端再接真实数据,比从空白文件开始快不少。

但生产级 UI 不只是布局。真正上线前至少要过这些检查:

TEXT
数据状态:loading、empty、error、partial success 权限状态:只读、可编辑、管理员、访客 响应式:手机、平板、桌面、大屏 可访问性:键盘导航、焦点态、语义标签、对比度 国际化:长文本、RTL、日期货币格式 性能:图片尺寸、懒加载、bundle 体积 设计系统:颜色、间距、字号、组件复用

所以它更适合做“前端初稿加速器”,不是“上线责任转移器”。这点要整明白,否则最后还是前端来擦屁股。

Style Guides 和 Anti-Slop:治一治 AI 模板味

AI UI 最容易让人烦的不是丑,而是太像。OpenPencil 内置 Style Guides,支持按 tag 模糊匹配视觉风格,比如 glassmorphism、brutalist、retro 等。它还强调 Anti-Slop,用来追踪多次生成之间的重复模式,减少同质化输出。

这方向是对的,但不能全靠工具。实际使用时建议把风格约束写得更具体:

TEXT
Use a light, dense B2B SaaS style. No purple gradient hero. No oversized emoji illustrations. Prefer table, filter bar, metrics cards and compact side navigation. Use 8px spacing scale and keep primary actions visually restrained.

如果是内部后台,就不要追求 Dribbble 味;如果是营销页,就把转化目标、首屏信息、信任背书、CTA 层级讲清楚。OpenPencil 能帮你生成,但“什么是好设计”还得有人管。

适合拿它做什么

比较适合的场景:

  • SaaS 落地页初稿和多版本视觉探索。
  • 内部后台、仪表盘、管理页的结构草图。
  • 设计系统变量和页面骨架快速成型。
  • 前端团队用 .op 文件做 Git 化设计协作。
  • Agent 工作流里批量生成页面初稿。
  • 多端 UI 代码导出前的结构验证。

不太适合一开始就拿它做这些:

  • 高复杂度品牌视觉定稿。
  • 对协作、评论、交付流程极度依赖 Figma 生态的大团队。
  • 需要像素级手工打磨的活动页。
  • 没有设计负责人 review 的“全自动上线 UI”。

一句话:OpenPencil 更适合把设计从“灵感稿”推进到“可工程化初稿”,而不是跳过设计判断。

一个更靠谱的团队用法

如果团队真要试,不建议直接把它塞进主仓库。可以先开一个 design-lab 仓库:

TEXT
design-lab/ briefs/ openpencil/ drafts/ approved/ exports/ reviews/

每次设计任务先写 brief:页面目标、用户角色、核心信息、组件约束、禁止事项。OpenPencil 根据 brief 生成 .op 初稿;设计师或前端负责人调整后进 approved;再导出 React + Tailwind;最后前端接入真实业务代码。

这样做有三个好处:

  • AI 输出不会直接污染主工程。
  • .op 变更可以进 Git review。
  • 设计探索和生产代码之间有明确闸门。

这才是 Design-as-Code 比较务实的打开方式。不是让设计师和程序员“彻底解放双手”,而是把初稿、批量修改、多端导出、Agent 协作这些重复劳动交出去,把判断、取舍、验收留下来。

OpenPencil 的价值也在这里。它没有把设计变成一句魔法咒语,而是把设计文件、画布、CLI、MCP、代码导出放进同一条工程链路。对 AI 产品团队来说,这比“1 分钟生成一个漂亮页面”更值得认真看。