openpencil/README.pt.md
Kayshen Xu 4af8ef412b
V0.3.3 (#33)
* 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>
2026-03-11 21:18:49 +08:00

12 KiB

OpenPencil

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

Stars License CI Discord


OpenPencil — clique para assistir ao demo

Clique na imagem para assistir ao vídeo de demonstração


Por que OpenPencil

🎨 Prompt → Canvas

Descreva 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 Concorrentes

O 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-Modelo

Adapta-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 MCP

Instalaçã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 .op através de qualquer agente compatível com MCP.

📦 Design-as-Code

Arquivos .op são JSON — legíveis por humanos, compatíveis com Git, com diff. Variáveis de design geram propriedades CSS personalizadas. Exportação de código para React + Tailwind ou HTML + CSS.

🖥️ Roda em Qualquer Lugar

App web + desktop nativo no macOS, Windows e Linux via Electron. Atualização automática a partir do GitHub Releases. Associação de arquivos .op — clique duplo para abrir.

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

Pré-requisitos: Bun >= 1.0 e Node.js >= 18

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 .op via qualquer agente compatível com MCP
  • Fluxo de design em camadasdesign_skeletondesign_contentdesign_refine para 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 .fig preservando 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.

  1. Faça fork e clone
  2. Crie uma branch: git checkout -b feat/my-feature
  3. Execute as verificações: npx tsc --noEmit && bun --bun run test
  4. Faça commit com Conventional Commits: feat(canvas): add rotation snapping
  5. 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

Contributors

Comunidade

Discord Entre no nosso Discord — Faça perguntas, compartilhe designs, sugira funcionalidades.

Star History

Star History Chart

Licença

MIT — Copyright (c) 2026 ZSeven-W