* fix(ai): add icon name aliases and fix multi-path SVG concatenation Add 55+ common icon name aliases (burger→hamburger, sushi→fish, etc.) to both client icon-resolver and server icon API for robust AI-generated icon resolution. Register Lucide's own aliases for broader coverage. Fix SVG path concatenation bug where joining multiple <path> d-values caused incorrect rendering — a standalone <path> treats initial lowercase "m" as absolute, but after concatenation it becomes relative to the previous sub-path endpoint. Now ensures each sub-path starts with absolute "M". Add tryAsyncIconFontResolution for icon_font nodes that miss local lookup — fetches from server API, caches result, and triggers canvas re-render. * fix(canvas): preserve badge/overlay absolute positioning in auto-layout Add isBadgeOverlayNode() detector for badge, indicator, notification-dot, and overlay nodes. These nodes now retain their x/y coordinates instead of being stripped by layout sanitization. Update computeLayoutPositions to exclude badge nodes from the layout flow — they keep absolute positioning and render on top (prepended for correct z-order in reverse iteration). * fix(ai): prevent duplicate canvas objects and fix emoji-to-icon pipeline Streaming path: add ensureUniqueNodeIds before inserting nodes to prevent ID collisions across multiple AI generations. Track newly inserted IDs so subsequent streaming nodes don't collide either. Canvas sync: deduplicate Fabric objects sharing the same penNodeId — keep only the one tracked in objMap, remove stale duplicates. Badge nodes: use shared isBadgeOverlayNode() for z-order insertion and skip x/y stripping in layout parents. Fix emoji-to-icon pipeline: re-run applyIconPathResolution after applyNoEmojiIconHeuristic converts emoji text nodes to path nodes, so the icon resolver can match by name (e.g. "Pizza Emoji Path" → pizza). * fix(canvas): add async icon resolution fallback for icon_font nodes When lookupIconByName fails locally, queue tryAsyncIconFontResolution to fetch from server API. Cache result in ICON_PATH_MAP and trigger canvas re-render via store update. Store iconFontName and iconStyle on Fabric object for sync tracking. * fix(ai): strengthen emoji ban in prompts and improve orchestrator defaults Update all AI prompts to explicitly ban emoji characters with concrete examples and redirect to icon_font nodes instead of the previously incorrect "path nodes" guidance. Add z-order rule to orchestrator prompt: overlay elements must come before content they overlap. Add padding support to OrchestratorPlan rootFrame type. Default mobile root frame gap to 16 for consistent spacing. * feat(electron): add publisher name to Windows build configuration Updated the `electron-builder.yml` to include a publisher name for Windows builds, enhancing the identification of the application during installation. Additionally, revised the README files across multiple languages to reflect the new project description and features, emphasizing OpenPencil as the world's first AI-native open-source vector design tool with concurrent agent teams and design-as-code capabilities. --------- Co-authored-by: Fini <fini.yang@gmail.com>
12 KiB
OpenPencil
A primeira ferramenta de design vetorial open-source nativa com IA do mundo.
Equipes de Agentes Concorrentes • Design-as-Code • Servidor MCP Integrado • Inteligência Multi-modelo
English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Français · Español · Deutsch · Português · Русский · हिन्दी · Türkçe · ไทย · Tiếng Việt · Bahasa Indonesia
Clique na imagem para assistir ao vídeo de demonstração
Por que OpenPencil
🎨 Prompt → CanvasDescreva qualquer UI em linguagem natural. Veja-a aparecer no canvas infinito em tempo real com animação de streaming. Modifique designs existentes selecionando elementos e conversando. |
🤖 Equipes de Agentes ConcorrentesO orquestrador decompõe páginas complexas em sub-tarefas espaciais. Vários agentes de IA trabalham em diferentes seções simultaneamente — hero, features, footer — tudo em streaming paralelo. |
🧠 Inteligência Multi-ModeloAdapta-se automaticamente às capacidades de cada modelo. Claude recebe prompts completos com thinking; GPT-4o/Gemini desativam thinking; modelos menores (MiniMax, Qwen, Llama) recebem prompts simplificados para saída confiável. |
🔌 Servidor MCPInstalação com um clique no Claude Code, Codex, Gemini, OpenCode, Kiro ou Copilot CLIs. Faça design pelo seu terminal — leia, crie e modifique arquivos |
📦 Design-as-CodeArquivos |
🖥️ Roda em Qualquer LugarApp web + desktop nativo no macOS, Windows e Linux via Electron. Atualização automática a partir do GitHub Releases. Associação de arquivos |
Início Rápido
# Instalar dependências
bun install
# Iniciar servidor de desenvolvimento em http://localhost:3000
bun --bun run dev
Ou executar como aplicativo desktop:
bun run electron:dev
Design Nativo com IA
Do Prompt à UI
- Texto para design — descreva uma página e ela será gerada no canvas em tempo real com animação de streaming
- Orquestrador — decompõe páginas complexas em sub-tarefas espaciais para geração paralela
- Modificação de design — selecione elementos e descreva as alterações em linguagem natural
- Entrada de visão — anexe capturas de tela ou mockups para design baseado em referência
Suporte Multi-Agente
| Agente | Configuração |
|---|---|
| Claude Code | Sem configuração — usa o Claude Agent SDK com OAuth local |
| Codex CLI | Conectar nas Configurações do Agente (Cmd+,) |
| OpenCode | Conectar nas Configurações do Agente (Cmd+,) |
| GitHub Copilot | copilot login e depois conectar nas Configurações do Agente (Cmd+,) |
Perfis de Capacidade de Modelo — adapta automaticamente prompts, modo de thinking e timeouts por nível de modelo. Modelos de nível completo (Claude) recebem prompts completos; nível padrão (GPT-4o, Gemini, DeepSeek) desativam thinking; nível básico (MiniMax, Qwen, Llama, Mistral) recebem prompts simplificados de JSON aninhado para máxima confiabilidade.
Servidor MCP
- Servidor MCP integrado — instalação com um clique no Claude Code / Codex / Gemini / OpenCode / Kiro / Copilot CLIs
- Automação de design pelo terminal: leia, crie e modifique arquivos
.opvia qualquer agente compatível com MCP - Fluxo de design em camadas —
design_skeleton→design_content→design_refinepara designs multi-seção de maior fidelidade - Recuperação segmentada de prompts — carregue apenas o conhecimento de design necessário (schema, layout, roles, icons, planning, etc.)
- Suporte a múltiplas páginas — crie, renomeie, reordene e duplique páginas via ferramentas MCP
Geração de Código
- React + Tailwind CSS
- HTML + CSS
- CSS Variables a partir de tokens de design
Funcionalidades
Canvas e Desenho
- Canvas infinito com pan, zoom, guias de alinhamento inteligentes e snapping
- Retângulo, Elipse, Linha, Polígono, Caneta (Bezier), Frame, Texto
- Operações booleanas — união, subtração, interseção com barra de ferramentas contextual
- Seletor de ícones (Iconify) e importação de imagens (PNG/JPEG/SVG/WebP/GIF)
- Auto-layout — vertical/horizontal com gap, padding, justify, align
- Documentos com múltiplas páginas e navegação por abas
Sistema de Design
- Variáveis de design — tokens de cor, número e string com referências
$variable - Suporte a múltiplos temas — vários eixos, cada um com variantes (Claro/Escuro, Compacto/Confortável)
- Sistema de componentes — componentes reutilizáveis com instâncias e substituições
- Sincronização CSS — propriedades personalizadas geradas automaticamente,
var(--name)na saída de código
Importação do Figma
- Importe arquivos
.figpreservando layout, preenchimentos, traços, efeitos, texto, imagens e vetores
Aplicativo Desktop
- macOS, Windows e Linux nativos via Electron
- Associação de arquivos
.op— clique duplo para abrir, bloqueio de instância única - Atualização automática a partir do GitHub Releases
- Menu de aplicativo nativo e diálogos de arquivo
Stack Tecnológica
| Frontend | React 19 · TanStack Start · Tailwind CSS v4 · shadcn/ui |
| Canvas | Fabric.js v7 |
| Estado | Zustand v5 |
| Servidor | Nitro |
| Desktop | Electron 35 |
| IA | Anthropic SDK · Claude Agent SDK · OpenCode SDK · Copilot SDK |
| Runtime | Bun · Vite 7 |
| Formato de arquivo | .op — baseado em JSON, legível por humanos, compatível com Git |
Estrutura do Projeto
src/
canvas/ Motor Fabric.js — desenho, sincronização, layout, guias, ferramenta caneta
components/ UI React — editor, painéis, diálogos compartilhados, ícones
services/ai/ Chat IA, orquestrador, geração de design, streaming
services/figma/ Pipeline de importação binária do Figma .fig
services/codegen Geradores de código React+Tailwind e HTML+CSS
stores/ Zustand — canvas, documento, páginas, histórico, IA, configurações
variables/ Resolução de tokens de design e gerenciamento de referências
mcp/ Ferramentas do servidor MCP para integração com CLI externo
uikit/ Sistema de kit de componentes reutilizáveis
server/
api/ai/ API Nitro — chat em streaming, geração, validação
utils/ Wrappers de cliente Claude CLI, OpenCode, Codex, Copilot
electron/
main.ts Janela, fork do Nitro, menu nativo, atualizador automático
preload.ts Ponte IPC
Atalhos de Teclado
| Tecla | Ação | Tecla | Ação | |
|---|---|---|---|---|
V |
Selecionar | Cmd+S |
Salvar | |
R |
Retângulo | Cmd+Z |
Desfazer | |
O |
Elipse | Cmd+Shift+Z |
Refazer | |
L |
Linha | Cmd+C/X/V/D |
Copiar/Recortar/Colar/Duplicar | |
T |
Texto | Cmd+G |
Agrupar | |
F |
Frame | Cmd+Shift+G |
Desagrupar | |
P |
Ferramenta caneta | Cmd+Shift+E |
Exportar | |
H |
Mão (pan) | Cmd+Shift+C |
Painel de código | |
Del |
Excluir | Cmd+Shift+V |
Painel de variáveis | |
[ / ] |
Reordenar | Cmd+J |
Chat IA | |
| Setas | Mover 1px | Cmd+, |
Configurações do agente | |
Cmd+Alt+U |
União booleana | Cmd+Alt+S |
Subtração booleana | |
Cmd+Alt+I |
Interseção booleana |
Scripts
bun --bun run dev # Servidor de desenvolvimento (porta 3000)
bun --bun run build # Build de produção
bun --bun run test # Executar testes (Vitest)
npx tsc --noEmit # Verificação de tipos
bun run electron:dev # Desenvolvimento com Electron
bun run electron:build # Empacotamento do Electron
Contribuindo
Contribuições são bem-vindas! Consulte o CLAUDE.md para detalhes de arquitetura e estilo de código.
- Faça fork e clone
- Crie uma branch:
git checkout -b feat/my-feature - Execute as verificações:
npx tsc --noEmit && bun --bun run test - Faça commit com Conventional Commits:
feat(canvas): add rotation snapping - Abra um PR contra
main
Roadmap
- Variáveis de design e tokens com sincronização CSS
- Sistema de componentes (instâncias e substituições)
- Geração de design com IA e orquestrador
- Integração com servidor MCP e fluxo de design em camadas
- Suporte a múltiplas páginas
- Importação do Figma
.fig - Operações booleanas (união, subtração, interseção)
- Perfis de capacidade multi-modelo
- Edição colaborativa
- Sistema de plugins
Contribuidores
Comunidade
Star History
Licença
MIT — Copyright (c) 2026 ZSeven-W