mirror of
https://github.com/ZSeven-W/openpencil.git
synced 2026-06-01 03:14:29 +07:00
* docs: add image search & generation design spec and implementation plan - Spec: dual-source image search (Openverse + Wikimedia), multi-provider image generation - Plan: 16 tasks covering types, server endpoints, settings UI, property panel, auto-search pipeline, MCP integration * feat(types): add image service types and imagePrompt to ImageNode * feat(server): add image service API key validation endpoint Adds POST /api/ai/image-service-test that validates credentials for openverse (client_credentials), openai/custom (Bearer + /v1/models), gemini (API key + v1beta/models), and replicate (Bearer + /v1/models). * feat(server): add multi-provider image generation endpoint * feat(server): add dual-source image search endpoint (Openverse + Wikimedia) POST /api/ai/image-search searches freely-licensed images via Openverse with automatic fallback to Wikimedia Commons on 429 rate-limit responses. Supports optional OAuth credentials for authenticated Openverse requests. * feat(store): add imageSearchStatuses to canvas store for runtime status tracking * feat(store): add image generation config and Openverse OAuth to agent settings * feat(editor): add Images tab to agent settings dialog Adds Popover primitive, ImagesPage component with Image Search (Openverse OAuth, test) and Image Generation (provider select, API key, model, base URL) sections, and wires them into the settings dialog sidebar. * feat(panels): add image search popover with Openverse/Wikimedia results grid * feat(panels): add image generate popover with multi-provider support * feat(panels): add Search and Generate buttons to image property section * feat(ai): update prompts to use imagePrompt instead of src for image nodes * feat(ai): add auto-search pipeline with Openverse/Wikimedia fallback * feat(ai): trigger auto image search after design generation completes * feat(mcp): implement G() operation for image search in batch design DSL Adds the G(parent, mode, prompt) operation to batch_design DSL that creates an image node and optionally fetches a real image URL via the image-search API when mode is "search". Converts executeLine to async to support the network call. * feat(mcp): auto-fill images after design refinement in layered pipeline * feat(ai): split imageSearchQuery and imagePrompt for search vs generation - ImageNode now has both imageSearchQuery (short keywords for search) and imagePrompt (long description for AI image generation) - AI prompts instruct LLM to generate both fields - Search pipeline and popovers use imageSearchQuery - Generate popover uses imagePrompt - Server-side simplifySearchQuery kept as fallback for manual input * fix(ai): hook auto image search into orchestrator completion path The primary generation path uses executeOrchestration -> insertStreamingNode, not applyNodesToCanvas/animateNodesToCanvas. Added scanAndFillImages call to orchestrator.ts after all sub-agents complete. Added debug logging. Removed plan/spec docs from git. * style(editor): remove provider names from image search ready status * fix(panels): clean up image gen error display and settings UI - Parse API error response to show concise message instead of raw JSON - Limit error text to 2 lines with line-clamp - Fix image gen test button sending wrong service name - Inline Image Search ready indicator with section header - Remove debug logging from image search pipeline * style(panels): allow up to 4 lines for image gen error message * fix: avoid 1-frame delay when resizing canvas (#60) rAF callbacks run before ResizeObserver in the same frame. Scheduling render in ResizeObserver via rAF defers it to the next frame. Invoke render() synchronously to leverage ResizeObserver's pre-paint timing and ensure immediate visual update. * feat(electron): implement desktop application structure and auto-updater - Introduced a new Electron desktop application with a structured directory for apps and packages. - Added auto-updater functionality to manage application updates seamlessly. - Created a comprehensive menu system for the desktop app. - Implemented logging capabilities for better debugging and error tracking. - Configured build settings for various platforms (macOS, Windows, Linux) using electron-builder. - Established TypeScript configurations for both the desktop and web applications. - Integrated Vite for the web application with support for React and Tailwind CSS. - Added icons and assets for the desktop application. * chore: update package versions to 0.5.0 across all package.json files and add pre-commit hook for version synchronization - Bumped version to 0.5.0 in package.json files for the main project, desktop app, web app, and all packages. - Introduced a pre-commit hook to automatically sync version numbers from branch names to all package.json files. * chore: update package versions to 0.5.0 and refactor Skia components - Bumped version to 0.5.0 in bun.lock and all relevant package.json files. - Refactored Skia components to utilize shared functionality from @zseven-w/pen-renderer, including image loading, hit testing, and path utilities. - Removed redundant code and improved modularity by re-exporting necessary functions and classes from the renderer package. * fix(panels): handle string fill values in icon nodes (#61) AI-generated icon/path nodes may have fill stored as a raw string instead of a PenFill[] array, causing "Cannot use 'in' operator" crash when selecting the node in the property panel. * chore: update documentation and project structure for monorepo organization - Added a new version bump command to synchronize all package.json files. - Updated the project structure to reflect a monorepo setup with organized workspaces for apps and packages. - Enhanced README files in multiple languages to include the new structure and commands. - Adjusted image paths in documentation to point to the correct locations for the desktop application. * feat(ai): incremental image search and improved image generation prompts - Refactor image search from batch post-generation to incremental queue: enqueueImageForSearch() triggers as each image node is inserted during streaming, so images appear progressively instead of all at once after generation completes. scanAndFillImages() remains as a final sweep. - Update imagePrompt guidance to avoid "transparent background" and similar phrases that many models cannot reliably produce. - Pass node width/height from image panel to generation endpoint for aspect-ratio-aware output (Gemini aspect ratio mapping, OpenAI size selection, Replicate dimensions). * feat(ai): multi-profile image generation config and cleaner error messages - Support multiple image generation profiles with active selection; first configured profile becomes default. Old single-config migrated automatically on hydrate. - Fix Gemini aspect ratio: move to generationConfig.imageConfig per API spec. - Extract clean error messages from provider JSON responses (Gemini error.message, OpenAI error.message, Replicate detail) instead of returning raw JSON text. - Remove destructive client-side regex that mangled error display. * feat(design-md): integrate design system panel and functionality - Added a new DesignMdPanel component for managing design system specifications. - Implemented functionality to toggle the design system panel in the editor layout and toolbar. - Introduced new commands for importing, exporting, and auto-generating design.md content. - Updated AI chat handlers to utilize design.md data for enhanced design generation. - Enhanced localization support for design system features across multiple languages. * perf(canvas): skip draw calls for nodes outside the viewport (#64) Add viewport culling in render() to avoid issuing CanvasKit draw calls for off-screen nodes. A 64px screen-space buffer is kept around the viewport edges so nearby nodes are pre-rendered, preventing pop-in during fast panning. * feat(utils): enhance Windows process spawning for CLI scripts - Updated the buildSpawnClaudeCodeProcess function to handle .cmd and .ps1 scripts appropriately. - Implemented PowerShell invocation for .ps1 files and ensured safe defaults for .cmd and .exe files. - Improved handling of command execution to avoid limitations of cmd.exe. * feat(ai): add support for Gemini CLI integration - Extended the AI provider options to include 'gemini' across various components and APIs. - Implemented functions for generating, validating, and connecting to the Gemini CLI. - Added Gemini-specific error handling and model fetching logic. - Updated UI components to display Gemini as a selectable provider with appropriate icons and labels. - Enhanced localization support for Gemini-related features in multiple languages. * feat(editor): warn before closing with unsaved changes Intercept window/tab close when isDirty is true: - Electron: native dialog with Save / Don't Save / Cancel - Web: beforeunload handler + confirm on New/Open actions - i18n: close-confirm strings for all 15 locales * feat(ipc): extract IPC handlers to a dedicated module - Moved IPC dialog handling and updater functions from main.ts to ipc-handlers.ts for better organization and maintainability. - Implemented file open/save dialogs, theme setting, and preferences management through IPC. - Enhanced updater functionality with state management and auto-update settings. - Improved code structure by separating concerns, making it easier to manage IPC-related logic. * feat(docs): update CLAUDE documentation and add new files for desktop and web apps - Enhanced CLAUDE.md with detailed module documentation references for `packages/` and `apps/`. - Updated `pen-core` description to include clone utilities in `pen-core`. - Added new documentation files for the desktop and web applications, outlining their structure, components, and functionalities. - Included IPC handler details in the desktop app documentation for better clarity on file dialogs and theme synchronization. * feat(docker): add Gemini CLI support and update documentation - Introduced a new Docker build stage for the Gemini CLI, allowing users to install and run it. - Updated the Dockerfile to include the installation of the Gemini CLI alongside existing CLI tools. - Enhanced README files in multiple languages to document the new `openpencil-gemini` image variant. - Added Gemini CLI connection instructions to the main README for better user guidance. * feat(docs): add Gemini CLI connection instructions to multiple language READMEs - Updated README files in German, Spanish, French, Hindi, Indonesian, Japanese, Korean, Portuguese, Russian, Thai, Turkish, Vietnamese, and both Traditional and Simplified Chinese to include connection instructions for the Gemini CLI. - Enhanced documentation to improve user guidance for connecting the Gemini CLI in agent settings. * perf(renderer): replace count-based text cache limits with memory-based eviction (#66) previous limits (PARA_CACHE_MAX=200, TEXT_CACHE_MAX=300) were too small for scenes with many nodes, causing constant cache churn and paragraph rebuilds every frame, which dropped FPS significantly during canvas pan. - switch to byte-budget limits (64 MB paragraphs, 256 MB bitmaps) - bitmap size measured exactly as cw*ch*4; paragraph WASM heap estimated as content.length*64+4096 - eviction uses Map insertion order (FIFO) instead of a separate string[] array, replacing O(n) array.shift() with O(1) Map.entries().next() - evict before insert so the budget check includes the incoming entry --------- Co-authored-by: Fini <fini.yang@gmail.com> Co-authored-by: leinaldo <60176594+leinaldo@users.noreply.github.com>
337 lines
16 KiB
Markdown
337 lines
16 KiB
Markdown
<p align="center">
|
||
<img src="./apps/desktop/build/icon.png" alt="OpenPencil" width="120" />
|
||
</p>
|
||
|
||
<h1 align="center">OpenPencil</h1>
|
||
|
||
<p align="center">
|
||
<strong>世界初のオープンソース AI ネイティブベクターデザインツール。</strong><br />
|
||
<sub>並行エージェントチーム • Design-as-Code • 内蔵 MCP サーバー • マルチモデルインテリジェンス</sub>
|
||
</p>
|
||
|
||
<p align="center">
|
||
<a href="./README.md">English</a> · <a href="./README.zh.md">简体中文</a> · <a href="./README.zh-TW.md">繁體中文</a> · <a href="./README.ja.md"><b>日本語</b></a> · <a href="./README.ko.md">한국어</a> · <a href="./README.fr.md">Français</a> · <a href="./README.es.md">Español</a> · <a href="./README.de.md">Deutsch</a> · <a href="./README.pt.md">Português</a> · <a href="./README.ru.md">Русский</a> · <a href="./README.hi.md">हिन्दी</a> · <a href="./README.tr.md">Türkçe</a> · <a href="./README.th.md">ไทย</a> · <a href="./README.vi.md">Tiếng Việt</a> · <a href="./README.id.md">Bahasa Indonesia</a>
|
||
</p>
|
||
|
||
<p align="center">
|
||
<a href="https://github.com/ZSeven-W/openpencil/stargazers"><img src="https://img.shields.io/github/stars/ZSeven-W/openpencil?style=flat&color=cfb537" alt="Stars" /></a>
|
||
<a href="https://github.com/ZSeven-W/openpencil/blob/main/LICENSE"><img src="https://img.shields.io/github/license/ZSeven-W/openpencil?color=64748b" alt="License" /></a>
|
||
<a href="https://github.com/ZSeven-W/openpencil/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/ZSeven-W/openpencil/ci.yml?branch=main&label=CI" alt="CI" /></a>
|
||
<a href="https://discord.gg/h9Fmyy6pVh"><img src="https://img.shields.io/discord/1476517942949580952?label=Discord&logo=discord&logoColor=white&color=5865F2" alt="Discord" /></a>
|
||
</p>
|
||
|
||
<br />
|
||
|
||
<p align="center">
|
||
<a href="https://oss.ioa.tech/zseven/openpencil/a46e24733239ce24de36702342201033.mp4">
|
||
<img src="./screenshot/op-cover.png" alt="OpenPencil — click to watch demo" width="100%" />
|
||
</a>
|
||
</p>
|
||
<p align="center"><sub>画像をクリックしてデモ動画を視聴</sub></p>
|
||
|
||
<br />
|
||
|
||
## Why OpenPencil
|
||
|
||
<table>
|
||
<tr>
|
||
<td width="50%">
|
||
|
||
### 🎨 プロンプト → キャンバス
|
||
|
||
自然言語で任意の UI を記述。ストリーミングアニメーションでリアルタイムに無限キャンバス上に表示。要素を選択してチャットすることで既存のデザインを修正。
|
||
|
||
</td>
|
||
<td width="50%">
|
||
|
||
### 🤖 並行エージェントチーム
|
||
|
||
オーケストレーターが複雑なページを空間的なサブタスクに分解。複数の AI エージェントがヒーロー、機能紹介、フッターなど異なるセクションを同時に処理し、すべてが並列でストリーミング。
|
||
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="50%">
|
||
|
||
### 🧠 マルチモデルインテリジェンス
|
||
|
||
各モデルの能力に自動適応。Claude にはシンキング付きフルプロンプト、GPT-4o/Gemini ではシンキングを無効化、小規模モデル(MiniMax、Qwen、Llama)には信頼性の高い出力のために簡略化プロンプトを使用。
|
||
|
||
</td>
|
||
<td width="50%">
|
||
|
||
### 🔌 MCP サーバー
|
||
|
||
Claude Code、Codex、Gemini、OpenCode、Kiro、Copilot CLI にワンクリックでインストール。ターミナルからデザイン — MCP 対応エージェントを通じて `.op` ファイルの読み取り、作成、編集が可能。
|
||
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td width="50%">
|
||
|
||
### 📦 Design-as-Code
|
||
|
||
`.op` ファイルは JSON — 人間が読みやすく、Git フレンドリーで差分比較可能。デザイン変数は CSS カスタムプロパティを生成。React + Tailwind または HTML + CSS へのコードエクスポート。
|
||
|
||
</td>
|
||
<td width="50%">
|
||
|
||
### 🖥️ どこでも動作
|
||
|
||
Web アプリ + Electron による macOS・Windows・Linux ネイティブデスクトップ。GitHub Releases からの自動アップデート。`.op` ファイル関連付け — ダブルクリックで開く。
|
||
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
|
||
## クイックスタート
|
||
|
||
```bash
|
||
# 依存関係をインストール
|
||
bun install
|
||
|
||
# http://localhost:3000 で開発サーバーを起動
|
||
bun --bun run dev
|
||
```
|
||
|
||
またはデスクトップアプリとして実行:
|
||
|
||
```bash
|
||
bun run electron:dev
|
||
```
|
||
|
||
> **前提条件:** [Bun](https://bun.sh/) >= 1.0 および [Node.js](https://nodejs.org/) >= 18
|
||
|
||
### Docker
|
||
|
||
複数のイメージバリアントが利用可能です — ニーズに合ったものを選択してください:
|
||
|
||
| イメージ | サイズ | 含まれるもの |
|
||
| --- | --- | --- |
|
||
| `openpencil:latest` | ~226 MB | Web アプリのみ |
|
||
| `openpencil-claude:latest` | — | + Claude Code CLI |
|
||
| `openpencil-codex:latest` | — | + Codex CLI |
|
||
| `openpencil-opencode:latest` | — | + OpenCode CLI |
|
||
| `openpencil-copilot:latest` | — | + GitHub Copilot CLI |
|
||
| `openpencil-gemini:latest` | — | + Gemini CLI |
|
||
| `openpencil-full:latest` | ~1 GB | すべての CLI ツール |
|
||
|
||
**実行(Web のみ):**
|
||
|
||
```bash
|
||
docker run -d -p 3000:3000 ghcr.io/zseven-w/openpencil:latest
|
||
```
|
||
|
||
**AI CLI 付きで実行(例:Claude Code):**
|
||
|
||
AI チャットは Claude CLI OAuth ログインに依存しています。Docker ボリュームを使用してログインセッションを永続化してください:
|
||
|
||
```bash
|
||
# ステップ 1 — ログイン(初回のみ)
|
||
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
|
||
|
||
# ステップ 2 — 起動
|
||
docker run -d -p 3000:3000 \
|
||
-v openpencil-claude-auth:/root/.claude \
|
||
ghcr.io/zseven-w/openpencil-claude:latest
|
||
```
|
||
|
||
**ローカルビルド:**
|
||
|
||
```bash
|
||
# ベース(Web のみ)
|
||
docker build --target base -t openpencil .
|
||
|
||
# 特定の CLI 付き
|
||
docker build --target with-claude -t openpencil-claude .
|
||
|
||
# フル(すべての CLI)
|
||
docker build --target full -t openpencil-full .
|
||
```
|
||
|
||
## AI ネイティブデザイン
|
||
|
||
**プロンプトから UI へ**
|
||
- **テキストからデザインへ** — ページを説明すると、ストリーミングアニメーションでリアルタイムにキャンバス上に生成
|
||
- **オーケストレーター** — 複雑なページを空間サブタスクに分解し、並列生成をサポート
|
||
- **デザイン修正** — 要素を選択し、自然言語で変更内容を記述
|
||
- **ビジョン入力** — スクリーンショットやモックアップを参照として添付してデザイン
|
||
|
||
**マルチエージェントサポート**
|
||
|
||
| エージェント | 設定方法 |
|
||
| --- | --- |
|
||
| **Claude Code** | 設定不要 — ローカル OAuth で Claude Agent SDK を使用 |
|
||
| **Codex CLI** | エージェント設定で接続(`Cmd+,`) |
|
||
| **OpenCode** | エージェント設定で接続(`Cmd+,`) |
|
||
| **GitHub Copilot** | `copilot login` 後、エージェント設定で接続(`Cmd+,`) |
|
||
| **Gemini CLI** | エージェント設定で接続(`Cmd+,`) |
|
||
|
||
**モデル能力プロファイル** — モデルの階層に応じてプロンプト、シンキングモード、タイムアウトを自動適応。フル階層モデル(Claude)には完全なプロンプト、標準階層(GPT-4o、Gemini、DeepSeek)ではシンキングを無効化、ベーシック階層(MiniMax、Qwen、Llama、Mistral)には最大限の信頼性のために簡略化されたネスト JSON プロンプトを使用。
|
||
|
||
**MCP サーバー**
|
||
- 内蔵 MCP サーバー — Claude Code / Codex / Gemini / OpenCode / Kiro / Copilot CLI にワンクリックでインストール
|
||
- Node.js を自動検出 — 未インストールの場合は HTTP トランスポートに自動フォールバックし、MCP HTTP サーバーを自動起動
|
||
- ターミナルからのデザイン自動化:MCP 対応エージェントを通じて `.op` ファイルの読み取り、作成、編集が可能
|
||
- **レイヤードデザインワークフロー** — `design_skeleton` → `design_content` → `design_refine` による高忠実度マルチセクションデザイン
|
||
- **セグメント化プロンプト取得** — 必要なデザイン知識のみをロード(schema、layout、roles、icons、planning など)
|
||
- マルチページサポート — MCP ツールを通じてページの作成、名前変更、並べ替え、複製が可能
|
||
|
||
**コード生成**
|
||
- React + Tailwind CSS、HTML + CSS、CSS Variables
|
||
- Vue、Svelte、Flutter、SwiftUI、Jetpack Compose、React Native
|
||
|
||
## 機能
|
||
|
||
**キャンバスと描画**
|
||
- パン、ズーム、スマートアライメントガイド、スナッピング対応の無限キャンバス
|
||
- 矩形、楕円、直線、多角形、ペン(ベジェ)、Frame、テキスト
|
||
- ブーリアン演算 — 合体、型抜き、交差(コンテキストツールバー付き)
|
||
- アイコンピッカー(Iconify)と画像インポート(PNG/JPEG/SVG/WebP/GIF)
|
||
- オートレイアウト — 垂直/水平方向、ギャップ・パディング・justify・align 対応
|
||
- タブナビゲーション付きマルチページドキュメント
|
||
|
||
**デザインシステム**
|
||
- デザイン変数 — カラー・数値・文字列トークン、`$variable` 参照付き
|
||
- マルチテーマサポート — 複数のテーマ軸、各軸に複数バリアント(Light/Dark、Compact/Comfortable)
|
||
- コンポーネントシステム — インスタンスとオーバーライドを持つ再利用可能なコンポーネント
|
||
- CSS 同期 — カスタムプロパティの自動生成、コード出力に `var(--name)` を使用
|
||
|
||
**Figma インポート**
|
||
- レイアウト、フィル、ストローク、エフェクト、テキスト、画像、ベクターを保持して `.fig` ファイルをインポート
|
||
|
||
**デスクトップアプリ**
|
||
- Electron によるネイティブ macOS・Windows・Linux 対応
|
||
- `.op` ファイル関連付け — ダブルクリックで開く、シングルインスタンスロック
|
||
- GitHub Releases からの自動アップデート
|
||
- ネイティブアプリケーションメニューとファイルダイアログ
|
||
|
||
## 技術スタック
|
||
|
||
| | |
|
||
| --- | --- |
|
||
| **フロントエンド** | React 19 · TanStack Start · Tailwind CSS v4 · shadcn/ui |
|
||
| **キャンバス** | CanvasKit/Skia(WASM、GPU アクセラレーション) |
|
||
| **状態管理** | Zustand v5 |
|
||
| **サーバー** | Nitro |
|
||
| **デスクトップ** | Electron 35 |
|
||
| **AI** | Anthropic SDK · Claude Agent SDK · OpenCode SDK · Copilot SDK |
|
||
| **ランタイム** | Bun · Vite 7 |
|
||
| **ファイル形式** | `.op` — JSON ベース、人間が読みやすく、Git フレンドリー |
|
||
|
||
## プロジェクト構成
|
||
|
||
```text
|
||
openpencil/
|
||
├── apps/
|
||
│ ├── web/ TanStack Start Web アプリ
|
||
│ │ ├── src/
|
||
│ │ │ ├── canvas/ CanvasKit/Skia エンジン — 描画、同期、レイアウト
|
||
│ │ │ ├── components/ React UI — エディター、パネル、共有ダイアログ、アイコン
|
||
│ │ │ ├── services/ai/ AI チャット、オーケストレーター、デザイン生成、ストリーミング
|
||
│ │ │ ├── stores/ Zustand — キャンバス、ドキュメント、ページ、履歴、AI
|
||
│ │ │ ├── mcp/ 外部 CLI 統合用 MCP サーバーツール
|
||
│ │ │ ├── hooks/ キーボードショートカット、ファイルドロップ、Figma ペースト
|
||
│ │ │ └── uikit/ 再利用可能なコンポーネントキットシステム
|
||
│ │ └── server/
|
||
│ │ ├── api/ai/ Nitro API — ストリーミングチャット、生成、バリデーション
|
||
│ │ └── utils/ Claude CLI、OpenCode、Codex、Copilot ラッパー
|
||
│ └── desktop/ Electron デスクトップアプリ
|
||
│ ├── main.ts ウィンドウ、Nitro フォーク、ネイティブメニュー、自動アップデーター
|
||
│ ├── ipc-handlers.ts ネイティブファイルダイアログ、テーマ同期、設定 IPC
|
||
│ └── preload.ts IPC ブリッジ
|
||
├── packages/
|
||
│ ├── pen-types/ PenDocument モデルの型定義
|
||
│ ├── pen-core/ ドキュメントツリー操作、レイアウトエンジン、変数
|
||
│ ├── pen-codegen/ コードジェネレーター(React、HTML、Vue、Flutter、...)
|
||
│ ├── pen-figma/ Figma .fig ファイルパーサーとコンバーター
|
||
│ ├── pen-renderer/ スタンドアロン CanvasKit/Skia レンダラー
|
||
│ └── pen-sdk/ アンブレラ SDK(全パッケージの再エクスポート)
|
||
└── .githooks/ ブランチ名からのプレコミットバージョン同期
|
||
```
|
||
|
||
## キーボードショートカット
|
||
|
||
| キー | 操作 | | キー | 操作 |
|
||
| --- | --- | --- | --- | --- |
|
||
| `V` | 選択 | | `Cmd+S` | 保存 |
|
||
| `R` | 矩形 | | `Cmd+Z` | 元に戻す |
|
||
| `O` | 楕円 | | `Cmd+Shift+Z` | やり直す |
|
||
| `L` | 直線 | | `Cmd+C/X/V/D` | コピー/カット/ペースト/複製 |
|
||
| `T` | テキスト | | `Cmd+G` | グループ化 |
|
||
| `F` | Frame | | `Cmd+Shift+G` | グループ解除 |
|
||
| `P` | ペンツール | | `Cmd+Shift+E` | エクスポート |
|
||
| `H` | ハンド(パン) | | `Cmd+Shift+C` | コードパネル |
|
||
| `Del` | 削除 | | `Cmd+Shift+V` | 変数パネル |
|
||
| `[ / ]` | 重ね順の変更 | | `Cmd+J` | AI チャット |
|
||
| 矢印キー | 1px 微調整 | | `Cmd+,` | エージェント設定 |
|
||
| `Cmd+Alt+U` | ブーリアン合体 | | `Cmd+Alt+S` | ブーリアン型抜き |
|
||
| `Cmd+Alt+I` | ブーリアン交差 | | | |
|
||
|
||
## スクリプト
|
||
|
||
```bash
|
||
bun --bun run dev # 開発サーバー(ポート 3000)
|
||
bun --bun run build # 本番ビルド
|
||
bun --bun run test # テストの実行(Vitest)
|
||
npx tsc --noEmit # 型チェック
|
||
bun run bump <version> # すべての package.json のバージョンを同期
|
||
bun run electron:dev # Electron 開発モード
|
||
bun run electron:build # Electron パッケージング
|
||
```
|
||
|
||
## コントリビュート
|
||
|
||
コントリビューションを歓迎します!アーキテクチャの詳細とコードスタイルについては [CLAUDE.md](./CLAUDE.md) をご覧ください。
|
||
|
||
1. フォークしてクローン
|
||
2. バージョン同期を設定:`git config core.hooksPath .githooks`
|
||
3. ブランチを作成:`git checkout -b feat/my-feature`
|
||
4. チェックを実行:`npx tsc --noEmit && bun --bun run test`
|
||
5. [Conventional Commits](https://www.conventionalcommits.org/) 形式でコミット:`feat(canvas): add rotation snapping`
|
||
6. `main` ブランチに PR を作成
|
||
|
||
## ロードマップ
|
||
|
||
- [x] CSS 同期付きデザイン変数とトークン
|
||
- [x] コンポーネントシステム(インスタンスとオーバーライド)
|
||
- [x] オーケストレーター付き AI デザイン生成
|
||
- [x] レイヤードデザインワークフロー付き MCP サーバー統合
|
||
- [x] マルチページサポート
|
||
- [x] Figma `.fig` インポート
|
||
- [x] ブーリアン演算(合体、型抜き、交差)
|
||
- [x] マルチモデル能力プロファイル
|
||
- [x] 再利用可能なパッケージによるモノレポ構成
|
||
- [ ] 共同編集
|
||
- [ ] プラグインシステム
|
||
|
||
## コントリビューター
|
||
|
||
<a href="https://github.com/ZSeven-W/openpencil/graphs/contributors">
|
||
<img src="https://contrib.rocks/image?repo=ZSeven-W/openpencil" alt="Contributors" />
|
||
</a>
|
||
|
||
## コミュニティ
|
||
|
||
<a href="https://discord.gg/h9Fmyy6pVh">
|
||
<img src="./apps/web/public/logo-discord.svg" alt="Discord" width="16" />
|
||
<strong> Discord に参加する</strong>
|
||
</a>
|
||
— 質問、デザインの共有、機能のリクエストはこちら。
|
||
|
||
## Star History
|
||
|
||
<a href="https://star-history.com/#ZSeven-W/openpencil&Date">
|
||
<picture>
|
||
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=ZSeven-W/openpencil&type=Date&theme=dark" />
|
||
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=ZSeven-W/openpencil&type=Date" />
|
||
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=ZSeven-W/openpencil&type=Date" width="100%" />
|
||
</picture>
|
||
</a>
|
||
|
||
## ライセンス
|
||
|
||
[MIT](./LICENSE) — Copyright (c) 2026 ZSeven-W
|