* 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>
11 KiB
OpenPencil
Das weltweit erste KI-native Open-Source-Vektordesign-Werkzeug.
Parallele Agententeams • Design-as-Code • Eingebauter MCP-Server • Multi-Modell-Intelligenz
English · 简体中文 · 繁體中文 · 日本語 · 한국어 · Français · Español · Deutsch · Português · Русский · हिन्दी · Türkçe · ไทย · Tiếng Việt · Bahasa Indonesia
Auf das Bild klicken, um das Demo-Video anzusehen
Warum OpenPencil
🎨 Prompt → CanvasBeschreiben Sie jede UI in natürlicher Sprache. Beobachten Sie, wie sie in Echtzeit mit Streaming-Animation auf der unendlichen Canvas erscheint. Ändern Sie bestehende Designs, indem Sie Elemente auswählen und chatten. |
🤖 Parallele AgententeamsDer Orchestrierer zerlegt komplexe Seiten in räumliche Teilaufgaben. Mehrere KI-Agenten arbeiten gleichzeitig an verschiedenen Bereichen — Hero, Features, Footer — alle parallel streamend. |
🧠 Multi-Modell-IntelligenzPasst sich automatisch an die Fähigkeiten jedes Modells an. Claude erhält vollständige Prompts mit Thinking; GPT-4o/Gemini deaktivieren Thinking; kleinere Modelle (MiniMax, Qwen, Llama) erhalten vereinfachte Prompts für zuverlässige Ausgabe. |
🔌 MCP-ServerEin-Klick-Installation in Claude Code, Codex, Gemini, OpenCode, Kiro oder Copilot CLIs. Designen Sie aus Ihrem Terminal — |
📦 Design-as-Code
|
🖥️ Läuft überallWeb-App + native Desktop-Anwendung auf macOS, Windows und Linux über Electron. Auto-Updates über GitHub Releases. |
Schnellstart
# Abhängigkeiten installieren
bun install
# Entwicklungsserver auf http://localhost:3000 starten
bun --bun run dev
Oder als Desktop-App ausführen:
bun run electron:dev
KI-natives Design
Vom Prompt zur UI
- Text-zu-Design — eine Seite beschreiben und sie wird in Echtzeit mit Streaming-Animation auf der Canvas generiert
- Orchestrierer — zerlegt komplexe Seiten in räumliche Teilaufgaben zur parallelen Generierung
- Design-Modifikation — Elemente auswählen und Änderungen in natürlicher Sprache beschreiben
- Bildeingabe — Screenshots oder Mockups als Referenz für referenzbasiertes Design anhängen
Multi-Agenten-Unterstützung
| Agent | Einrichtung |
|---|---|
| Claude Code | Keine Konfiguration — verwendet Claude Agent SDK mit lokalem OAuth |
| Codex CLI | In den Agenteneinstellungen verbinden (Cmd+,) |
| OpenCode | In den Agenteneinstellungen verbinden (Cmd+,) |
| GitHub Copilot | copilot login dann in den Agenteneinstellungen verbinden (Cmd+,) |
Modell-Fähigkeitsprofile — passt Prompts, Thinking-Modus und Timeouts automatisch pro Modellstufe an. Modelle der Vollstufe (Claude) erhalten vollständige Prompts; Standardstufe (GPT-4o, Gemini, DeepSeek) deaktiviert Thinking; Basisstufe (MiniMax, Qwen, Llama, Mistral) erhält vereinfachte verschachtelte JSON-Prompts für maximale Zuverlässigkeit.
MCP-Server
- Eingebauter MCP-Server — Ein-Klick-Installation in Claude Code / Codex / Gemini / OpenCode / Kiro / Copilot CLIs
- Design-Automatisierung vom Terminal aus:
.op-Dateien über jeden MCP-kompatiblen Agenten lesen, erstellen und bearbeiten - Mehrstufiger Design-Workflow —
design_skeleton→design_content→design_refinefür hochwertigere mehrteilige Designs - Segmentierter Prompt-Abruf — laden Sie nur das benötigte Design-Wissen (Schema, Layout, Rollen, Icons, Planung usw.)
- Mehrseitige Unterstützung — Seiten erstellen, umbenennen, neu ordnen und duplizieren über MCP-Tools
Codegenerierung
- React + Tailwind CSS
- HTML + CSS
- CSS Variables aus Design-Tokens
Funktionen
Canvas und Zeichnen
- Unendliche Canvas mit Pan, Zoom, intelligenten Ausrichtungshilfslinien und Einrasten
- Rechteck, Ellipse, Linie, Polygon, Stift (Bezier), Frame, Text
- Boolesche Operationen — Vereinigung, Subtraktion, Schnittmenge mit kontextbezogener Werkzeugleiste
- Icon-Auswahl (Iconify) und Bildimport (PNG/JPEG/SVG/WebP/GIF)
- Auto-Layout — vertikal/horizontal mit Gap, Padding, Justify, Align
- Mehrseitige Dokumente mit Tab-Navigation
Designsystem
- Designvariablen — Farb-, Zahl- und Text-Tokens mit
$variable-Referenzen - Multi-Theme-Unterstützung — mehrere Achsen, jeweils mit Varianten (Hell/Dunkel, Kompakt/Komfortabel)
- Komponentensystem — wiederverwendbare Komponenten mit Instanzen und Überschreibungen
- CSS-Synchronisierung — automatisch generierte benutzerdefinierte Eigenschaften,
var(--name)in der Code-Ausgabe
Figma-Import
.fig-Dateien importieren mit erhaltenem Layout, Füllungen, Konturen, Effekten, Text, Bildern und Vektoren
Desktop-App
- Natives macOS, Windows und Linux über Electron
.op-Dateizuordnung — Doppelklick zum Öffnen, Einzelinstanzsperre- Automatische Aktualisierung über GitHub Releases
- Natives Anwendungsmenü und Dateidialoge
Technologie-Stack
| Frontend | React 19 · TanStack Start · Tailwind CSS v4 · shadcn/ui |
| Canvas | Fabric.js v7 |
| Zustand | Zustand v5 |
| Server | Nitro |
| Desktop | Electron 35 |
| KI | Anthropic SDK · Claude Agent SDK · OpenCode SDK · Copilot SDK |
| Laufzeit | Bun · Vite 7 |
| Dateiformat | .op — JSON-basiert, menschenlesbar, Git-freundlich |
Projektstruktur
src/
canvas/ Fabric.js-Engine — Zeichnen, Synchronisierung, Layout, Hilfslinien, Stiftwerkzeug
components/ React-UI — Editor, Panels, gemeinsame Dialoge, Icons
services/ai/ KI-Chat, Orchestrierer, Designgenerierung, Streaming
services/figma/ Figma-.fig-Binär-Importpipeline
services/codegen React+Tailwind- und HTML+CSS-Codegeneratoren
stores/ Zustand — Canvas, Dokument, Seiten, Verlauf, KI, Einstellungen
variables/ Design-Token-Auflösung und Referenzverwaltung
mcp/ MCP-Server-Tools für externe CLI-Integration
uikit/ Wiederverwendbares Komponenten-Kit-System
server/
api/ai/ Nitro-API — Streaming-Chat, Generierung, Validierung
utils/ Claude CLI, OpenCode, Codex, Copilot-Client-Wrapper
electron/
main.ts Fenster, Nitro-Fork, natives Menü, Auto-Updater
preload.ts IPC-Brücke
Tastaturkürzel
| Taste | Aktion | Taste | Aktion | |
|---|---|---|---|---|
V |
Auswählen | Cmd+S |
Speichern | |
R |
Rechteck | Cmd+Z |
Rückgängig | |
O |
Ellipse | Cmd+Shift+Z |
Wiederholen | |
L |
Linie | Cmd+C/X/V/D |
Kopieren/Ausschneiden/Einfügen/Duplizieren | |
T |
Text | Cmd+G |
Gruppieren | |
F |
Frame | Cmd+Shift+G |
Gruppierung aufheben | |
P |
Stiftwerkzeug | Cmd+Shift+E |
Exportieren | |
H |
Hand (Pan) | Cmd+Shift+C |
Code-Panel | |
Del |
Löschen | Cmd+Shift+V |
Variablen-Panel | |
[ / ] |
Reihenfolge ändern | Cmd+J |
KI-Chat | |
| Pfeiltasten | 1px verschieben | Cmd+, |
Agenteneinstellungen | |
Cmd+Alt+U |
Boolesche Vereinigung | Cmd+Alt+S |
Boolesche Subtraktion | |
Cmd+Alt+I |
Boolesche Schnittmenge |
Skripte
bun --bun run dev # Entwicklungsserver (Port 3000)
bun --bun run build # Produktions-Build
bun --bun run test # Tests ausführen (Vitest)
npx tsc --noEmit # Typprüfung
bun run electron:dev # Electron-Entwicklung
bun run electron:build # Electron-Paketierung
Mitwirken
Beiträge sind willkommen! Siehe CLAUDE.md für Architekturdetails und Code-Stil.
- Forken und klonen
- Branch erstellen:
git checkout -b feat/my-feature - Prüfungen ausführen:
npx tsc --noEmit && bun --bun run test - Mit Conventional Commits committen:
feat(canvas): add rotation snapping - Pull Request gegen
mainöffnen
Roadmap
- Designvariablen & Tokens mit CSS-Synchronisierung
- Komponentensystem (Instanzen & Überschreibungen)
- KI-Designgenerierung mit Orchestrierer
- MCP-Server-Integration mit mehrstufigem Design-Workflow
- Mehrseitige Unterstützung
- Figma-
.fig-Import - Boolesche Operationen (Vereinigung, Subtraktion, Schnittmenge)
- Multi-Modell-Fähigkeitsprofile
- Kollaboratives Bearbeiten
- Plugin-System
Mitwirkende
Community
Star History
Lizenz
MIT — Copyright (c) 2026 ZSeven-W