Skip to content

Repository files navigation

Miniboard 白板

English | 简体中文

License: MIT Release CI

本地优先、完全离线的手绘白板。桌面端由 Tauri 2 承载,画布使用 leafer-ui 渲染;项目数据与 AI 自定义工具全部存在你自己的磁盘上(可自定义目录),不依赖任何云服务。

📸 界面截图

Miniboard 主界面

✨ 特性

  • 绘图工具:画笔(压力敏感手绘笔迹)、直线、箭头、矩形、椭圆、文本、框架、橡皮擦(笔迹分段擦除)、框选、套索等,工具栏由统一功能注册表驱动
  • 编辑操作:重复(Ctrl+D)、删除等便捷编辑操作
  • AI 助手(OpenAI 兼容接口):交流模式感知画布内容、编辑模式让 AI 运行时创建自定义绘制工具(冒烟测试防护),支持多模态截图
  • 整理与美化:手绘形状一键识别为标准图形、标准图形一键转手绘风格(rough.js,seed 可复现,粗糙度 0–2 可调)
  • 文本排版:对齐 / 字体 / 字重滑条(100–900),Ctrl+B 快捷切换常规与加粗
  • 箭头端点样式:直线 / 箭头两端可独立设置箭头、三角、圆点、圆等端点
  • 框架元素F 键创建虚线框(类 Figma Frame),框内元素跟随整体移动;支持导入 MD / 代码 / 文本文件为内容框架(按内容自适应尺寸,超高内容可折叠滚动查看);支持聚焦框架(视口放大到框架);拖入文件自动分流——图片直插画布、PDF 首页转图片、文本 / 代码生成内容框架
  • 多项目管理:独立画布 + 自动保存,启动自动恢复上次项目
  • 可自定义数据目录:项目与 AI 工具存储在本地文件(默认系统应用数据目录,可更改并自动迁移)
  • 导出:PNG 位图 / SVG 矢量图 / PDF 文档,元素结构无损

完整功能清单见下方 功能细节

🚀 安装

方式一:直接下载(推荐)

  • Releases 下载 Windows 安装包(NSIS)或便携 exe
  • 双击安装即可使用,无需任何配置

方式二:源码构建

  1. 安装 RustNode.js(≥ 18)
  2. Windows 构建桌面版还需 MSVC 工具链与 Windows SDK(推荐 Visual Studio Build Tools)
  3. 克隆仓库后执行:
npm install
npm run tauri build        # 或 Windows:powershell -ExecutionPolicy Bypass -File tools/build-tauri.ps1

产物位于 src-tauri/target/release/

🖥️ 快速开始(开发调试)

开发阶段推荐直接在浏览器中调试,无需构建 exe(浏览器功能与桌面端一致):

npm install
npm run dev        # 浏览器打开 http://localhost:5173

需要验证桌面集成(文件对话框、系统存储等)时再运行 npm run tauri dev

🤖 AI 助手配置

AI 助手使用 OpenAI 兼容接口(支持本地 Ollama / vLLM / 各种中转服务):

  1. 打开 ⚙ 设置 → AI 模型 页签
  2. 点击「新建配置」,填写:
    • 名称:任意,如 Ollama
    • 接口地址:如 http://localhost:11434/v1
    • API Key:本地服务的 Key 可任意填写;中转服务填真实 Key
    • 模型名:如 qwen2.5:7b(可点选「自动获取模型列表」)
    • 多模态:开启后交流模式随消息附带画布截图(需模型支持视觉)
  3. 点击「测试连接」验证,点选激活后即可使用

隐私说明:API Key 与模型配置仅保存在本地;对话内容只会发送到你自己填写的接口地址,应用本身不收集任何数据。

💾 数据存储

数据 默认位置 说明
项目画布 %APPDATA%\com.miniboard.app\projects\ 项目索引 index.json + 每项目场景文件
AI 自定义工具 %APPDATA%\com.miniboard.app\custom-tools.json AI 生成的绘制工具定义
界面偏好 / AI 配置 WebView2 localStorage(同目录 EBWebView 下) 主题、工具栏布局、模型配置等
  • 更改目录:⚙ 设置 → 数据 页签 → 「更改目录…」,旧数据自动迁移到新目录,重启后自动恢复
  • 备份:直接复制数据目录即可(关闭应用后进行)
  • 浏览器调试时数据存 localStorage,不占用磁盘目录

🧱 技术栈

技术
桌面壳 Tauri 2(Rust)
前端构建 Vite 6 + TypeScript
画布渲染 leafer-ui 2.2.9 + @leafer-in/editor / arrow / export / text-editor
笔迹轮廓 perfect-freehand(压力敏感笔迹平滑与轮廓生成)
手绘外观 roughjs(标准图形 → 手绘风格路径,seed 可复现)
AI 助手 OpenAI 兼容接口(SSE 流式):浏览器直接 fetch,桌面端经 @tauri-apps/plugin-http 转发

📁 项目结构

src/
├── ai/               # AI 助手:双模式对话 / 工具调用 / 设置 / @ 选区
│   ├── panel.ts      # AI 面板(交流/编辑双模式、@ 选区、上下文压缩、停止/超时)
│   ├── client.ts     # OpenAI 兼容客户端(SSE 流式 / 超时与取消 / 模型列表 / 连接测试)
│   ├── config.ts     # AI 多配置存储(localStorage,旧版单配置自动迁移)
│   ├── prompts.ts    # 双模式系统提示词
│   ├── tools.ts      # 画布感知 / 形状识别 / 工具执行器(update_elements 字段白名单、create_elements 官方格式解析)
│   └── types.ts
├── main.ts            # 入口:工具栏/状态栏/快捷键/右键菜单接线
├── storage.ts         # 存储层:多项目管理(项目索引 + 独立场景 + 旧数据迁移 + 数据目录可配置)/ 打开 / 另存 / 导出 PNG 与 SVG
├── types.ts           # 元素数据结构、项目元数据、工具类型与统一功能规则
├── ui/
│   ├── toolbar.ts     # 顶部工具栏(注册表驱动渲染 + 分组拆分按钮/下拉 + 填充开关 + 自定义布局与分组偏好)
│   ├── selectionbar.ts # 左侧选中悬浮栏(整理/手绘/裁剪/样式浮层 + 文字字号)
│   ├── statusbar.ts   # 右下状态栏(项目名 + 撤销/重做/缩放 + 元素信息)
│   ├── toolsfloat.ts  # 右侧圆形工具栏(文件/AI/清空/设置,可拖拽)
│   ├── exportdialog.ts # 统一导出弹窗(PNG / SVG 格式选择)
│   ├── settings.ts    # 设置弹窗(外观 / 工具栏 / AI 模型 / AI 工具 / 系统提示词 / 数据存储目录)
│   ├── contextmenu.ts # 右键菜单(复制/粘贴/锁定等操作)
│   └── style.css
└── board/
    ├── canvas.ts      # 画布核心:绘制/缩放/选择/橡皮擦/图片/剪贴板/样式应用/序列化/手绘风格转换/网格吸附与 SVG 导出
    ├── bounds.ts      # 元素包围盒计算(AI 感知 / 几何交互共用)
    ├── arrange.ts     # 排列纯函数:对齐 / 分布 / 翻转 / 层序(AI 的 arrange_elements 工具专用)
    ├── registry.ts    # 统一功能注册表:内置 + 自定义工具(AI 增删改,持久化适配器注入——桌面数据目录文件 / 浏览器 localStorage)
    ├── beautify.ts    # 整理:手绘形状识别与完善(圆/椭圆/矩形/多边形/直线)
    ├── coords.ts      # 元素局部 ↔ 画布绝对坐标换算(AI 上下文描述与 update_elements 写回共用)
    ├── offset.ts      # 粘贴平移纯函数(按元素坐标语义整体平移:line/arrow/path 平移 points/path,其余平移 x/y)
    ├── svg.ts         # SVG 导出纯函数(元素数据 → SVG 字符串,浏览器/桌面端共用)
    ├── stroke.ts      # 压力敏感笔迹封装(perfect-freehand:采样点 → 轮廓 path)
    ├── rough.ts       # 手绘风格渲染层(rough.js:标准图形 → 手绘 path,seed 可复现)
    └── history.ts     # 撤销重做

🧪 测试

核心纯函数模块(坐标换算 / 形状识别 / 粘贴平移 / 排列 / 工具注册表)配单元测试:

npm test

🤝 贡献

欢迎提交 Issue 与 PR!请先阅读 CONTRIBUTING.md

📄 许可证

MIT © aaget123


功能细节

  • 绘图工具:选择、画布移动、画笔、橡皮擦、直线、箭头、文本、框架等(工具栏由统一功能注册表驱动,AI 可运行时添加自定义工具)
    • 分组下拉:同类型工具收纳进同一下拉按钮——“形状▾”(矩形 / 椭圆 / 三角形 / 五角星等形状类工具)、“选择▾”(选择 / 框选 / 套索)与“AI 工具▾”(AI 生成的其余自定义工具默认收纳,避免平铺顶栏);分组按钮为拆分式——点击主按钮直接使用组内当前工具(“组头”,在菜单中任选一个即切换),点击右侧箭头展开菜单(菜单项右侧显示快捷键,AI 工具▾ 底部提供“管理 AI 工具”直达入口);AI 创建的形状类新工具自动归入“形状▾”;自定义工具管理在 ⚙ 设置 →「AI 工具」页签
    • 自定义工具栏(⚙ 设置 →「工具栏」页签):平铺区与分组收纳区分开布局——平铺区(勾选顶栏 + 拖拽排序,AI 自定义工具标注 AI 徽章)、分组收纳区(分组头可拖拽调整分组在顶栏中的顺序,顶部工具栏同步)、隐藏区;拖拽落点按目标行上下半判定插入其前/后,工具行与分组按钮行可互相拖拽插入,拖到自动同步的分组按钮副本(虚线行)即固定其位置;勾选/排序实时预览顶栏效果(超出建议上限自动折叠进“更多▾”),自定义布局持久化到 localStorage;勾选后的工具按设定顺序平铺,未勾选的分组工具收纳进对应下拉、未勾选的独立工具隐藏;「恢复默认」一键还原初始布局
      • 自定义分组:分组区右上角「+ 新建分组」创建自定义分组(可重命名 / 删除),拖任意工具行到分组头上即归入该组(空分组也显示、可拖入;拖回内置组头恢复默认归属);分组按钮组头 = 菜单中当前选中的工具,任选一个即切换;平铺区与分组区相互分离——分组头拖入平铺区即在落点插入完整分组按钮(组保持整体不拆开),分组按钮行拖回分组区即移除
    • 画笔为压力敏感笔迹(perfect-freehand):实时生成平滑的变宽轮廓,笔迹粗细随速度/压力自然变化;选中笔迹可在样式浮层调整粗细(1–40,调整时按新粗细重算轮廓),画笔工具激活时左侧栏同样显示样式按钮,可预先设置新笔迹的默认颜色/粗细
    • 橡皮擦为分段擦除:擦除画笔笔迹时只擦橡皮轨迹覆盖的区间(橡皮光标显示实际擦除半径),剩余部分自动拆成独立笔画;其余元素整条删除;锁定元素受保护不可擦除
    • 快捷键:V 选择 / H 画布移动 / M 框选 / Q 套索 / P 画笔 / E 橡皮擦 / L 直线 / A 箭头 / R 矩形 / O 椭圆 / T 文本 / F 框架 / K AI 助手开关 / Ctrl+K 命令面板 / Ctrl+B 文字加粗;所有快捷键可在 ⚙ 设置 →「快捷键」页签自定义(操作 + 内置工具全部可改键,冲突自动检测提示,一键恢复默认);AI 自定义工具可分配单字母快捷键(在「AI 工具」页签编辑)
  • AI 助手(🤖 按钮或 K 键,OpenAI 兼容接口,支持流式输出):
    • 交流模式:通过 get_canvas 感知画布内容(结构化 JSON:整体摘要 + 元素数据,含图形形状描述、region 区域标签与画布绝对坐标,手绘笔迹同样给出识别形状,AI 创建的元素带 intent 字段——创建时自报的用途,不带 intent 的元素不猜测其用途;摘要含元素统计、内容范围与空间分布——内容集中在哪个区域、哪里空旷一目了然),对话 / 评价 / 给建议;把想法用 draw_flowchart 画成流程图写入画布(节点矩形与文字自动同组、连线箭头自动绑定节点,移动节点连线跟随);明确要求“画 / 添加 / 放一个(些)元素”时用 create_elements 按 leafer 官方 JSON 格式直接创建(type 与 x/y 必填,line/arrow 的 points 用画布绝对坐标,无需 id,系统自动分配,可选 intent 简短自报创建意图并持久化保存);批量整理元素(对齐 / 分布 / 翻转 / 层序)用 arrange_elements 一次调用完成(语义指令 + 前端计算坐标,同组成员整组参与,锁定元素自动跳过);整理手绘笔迹用 beautify_elements、标准图形转手绘风格用 sketchify_elements、调整手绘粗糙度用 set_roughness(均按 id 操作,锁定元素自动跳过、同组成员整组参与);不擅自改动画布,除非明确要求;同轮对话中画布未被修改时不重复调用 get_canvas(工具使用纪律,节省轮次与 token)
    • 长对话自动压缩:历史按 token 预算管理(约 8000,含系统提示词),超限自动丢弃最早轮次并提示一次;仅剩当前轮时把较早的画布数据收缩为占位说明(模型可随时重新 get_canvas),保证最近上下文完整
    • 生成控制:生成中发送按钮变为红色“停止”,点击立即中断(已输出的内容保留,可继续对话);对话请求 90 秒无响应自动停止,连接测试 / 模型列表探测 15 秒超时,不会无限挂起
    • 编辑模式:按统一功能规则运行时添加 / 修改 / 删除绘制工具(AI 生成代码函数,立即生效并持久化——桌面端存数据目录 custom-tools.json,浏览器端存 localStorage);工具行为分两类——drag 拖拽生成(根据拖拽范围动态计算形状,默认)与 click 点击生成(点击即生成固定大小元素,如印章 / 便利贴);生成器可返回单个元素或元素数组(组合工具,如标题 + 下划线,拖拽中其余元素与主草稿实时同步预览,松手合并为一步撤销);添加 / 修改前自动冒烟测试(危险代码扫描 → 隔离 Worker 执行 + 超时熔断 → 返回值格式强校验,未通过返回具体原因供 AI 修正重试),验证通过后自动在画布右侧试画示例供立即查看;创建与已有工具同类型的新工具时归入同一分组下拉;功能区操作在面板中显示工具卡片回执(图标 + 名称 + 行为类别 / 分组 / 快捷键徽章);工具图标受字符白名单校验(1-2 个字符的中文 / 字母 / 数字 / 常见符号,拒绝 emoji 与超长符号,旧数据自动回退为默认符号)
    • 清除对话:面板头部垃圾桶按钮一键清空当前对话记录(不影响画布内容),切换模式时自动清空
    • AI 工具管理:⚙ 设置 →「AI 工具」页签——编辑名称 / 图标 / 快捷键 / 分组、删除工具;生成器源码只读展示(由 AI 维护)
    • @ 选区:选中图形后点面板 @ 按钮,AI 将重点分析这些元素(选区数据与用户消息合并为一条注入,不截断);明确要求时用 update_elements 直接优化(改颜色 / 尺寸 / 位置 / 文字 / 端点等),整轮改动合并为一步撤销,且只改 @ 选区内元素;写入受字段白名单保护(仅外观 / 几何字段,运行时字段一律忽略)
    • 设置(☰ 文件与工具 → ⚙):主题切换(深色 / 浅色 / 跟随系统,画布背景与导出同步,系统主题变化自动跟随)+ 画布网格(见下)+ AI 模型配置管理——可注册多个配置(名称 / 接口地址 / API Key / 模型名 / 多模态,localStorage 保存),点选激活使用,支持编辑、删除与一键测试连接(自动拉取可用模型列表点选,/models 不可用时降级为最小请求验证);多模态开启后交流模式随消息附带画布截图 + 快捷键页签(操作与内置工具键位自定义,录制式改键 + 冲突检测 + 恢复默认,改动即时生效)
  • 命令面板Ctrl+K):居中搜索浮层,检索全部绘制工具与全局操作(打开/保存/插入图片/导出/项目管理/设置/AI 助手/主题切换/清空画布等),↑↓ 选择、Enter 执行、Esc 关闭
    • 快捷键帮助:命令面板 → “快捷键帮助”查看全部快捷键清单(动态反映当前自定义键位)
  • 空画布欢迎语:画布为空时中央淡字引导(图标 + “画布空空如也,选择一个工具开始绘制” + 常用快捷键提示),首次绘制自动淡出,清空画布后重新出现
  • 选择:像素级命中(线段/箭头/画笔按实际描边命中);细线带 5px 命中容差;空心图形透明区域可穿透选中下层元素
  • 连续点击选取:Ctrl/Cmd + 点击切换选中(点未选中的加入多选、点已选中的取消),Shift + 点击累加选择(只加不减),编辑框自动包围所有选中元素;修饰键点击空白保持当前选择(连续选取中途误点不丢失),普通点击空白取消全部
  • 框选 / 套索:收纳在“选择▾”分组下拉中——框选为矩形选框选中相交元素,套索为自由圈选闭合区域
  • 选中框内拖动:在选中元素包围盒内的空白区域按下拖动,可整体移动单个或多个选中元素(悬停显示移动光标)
  • 选中栏按类型差异化:左侧选中悬浮栏随元素类型显示对应按钮——图片显示裁剪、直线/箭头显示点编辑、文本显示字号滑块;切换到非选择工具或文本编辑中自动隐藏,显隐带过渡动画
  • 样式编辑:选中元素后可直接修改描边颜色 / 填充颜色 / 描边粗细(滑块 1–40,带数值显示)/ 文字字号(选中文字时样式浮层额外显示字号滑块 10–72,拖动即时改大小);画笔笔迹调整粗细时按新粗细重算轮廓立即生效
    • 线型 / 透明度 / 圆角:线型三档(实线 / 虚线 / 点线,作用于可描边形状);不透明度滑条 0–100%(可编辑元素);圆角滑条 0–100(仅单选矩形时显示,实时预览)
    • 文本排版:选中文本时样式浮层显示对齐(左 / 居中 / 右)、字体下拉(默认 / 常用中文字体 / 西文字体)、字重滑条(100–900,Ctrl+B 快捷切换常规 / 加粗,整元素切换)——随文件保存恢复
    • 箭头端点:选中直线 / 箭头时样式浮层显示起点 / 终点两组端点按钮——箭头 / 三角 / 圆点 / 圆 / 无,两端独立设置(arrow 类型创建时默认三角头)
    • 粗糙度:选中手绘风格元素时样式浮层显示「粗糙」滑条(0–2,步进 0.1)——以同一抖动 seed 即时重绘,撤销 / 重载后形态可复现
    • 最近使用颜色:取色器选中的非基础色自动记入样式浮层“最近”行(本地记忆最多 4 个),点击即用
    • 描边与填充双通道独立:点击“描边”/“填充”按钮切换激活通道,色板与自定义取色器作用于当前通道(填充 = 所选色 15% 半透明,填充通道点击自动开启填充)
    • 填充开关(顶部工具栏图标按钮:方块 + 下半实心):开 = 用记忆的填充色填充,关 = 移除填充;锁定元素与图片不受影响;Path 闭合形状(含 AI 生成的三角形/五角星)同样支持填充
    • Text 元素:两通道均作用于文字颜色
  • 图片插入:右侧圆形工具栏“插入图片”按钮选择本地图片插入,插入后自动选中,可移动 / 缩放 / 旋转(大图自动缩至视口内)
    • 图片裁剪:选中图片后点选中栏“裁剪”按钮进入裁剪模式,拖动裁剪框边 / 角手柄调整范围,双击应用(仅支持未旋转图片)
    • 编辑框自动聚焦,点击即可直接输入;Esc 退出编辑;内容有变化才记入撤销历史,空文本自动删除不留痕;双击文本/线元素时若当前非选择工具(如刚画完的标题组合),自动切换为选择工具再进入编辑,无需手动切换
    • 缩放语义:选中文本后拖拽缩放手柄——横向缩放自动换行(字号不变),纵向缩放直接改字号,不会拉伸变形
  • 右键菜单:整理 / 手绘 / 复制 / 粘贴 / 剪切 / 删除 / 全选 / 置顶 / 置底 / 锁定 / 解锁 / 矩形⇄框架互转 / 内容约束 / 折叠内容 / 聚焦框架(整理与手绘按选区内容智能显隐,与左侧选中栏共用;锁定后元素不可移动、缩放、删除)
    • 快捷键:Ctrl+C 复制 / Ctrl+X 剪切 / Ctrl+V 粘贴 / Ctrl+A 全选;粘贴时新元素跟随鼠标当前位置——复制时从元素实际渲染位置记录包围盒,粘贴以包围盒中心对齐鼠标(缩放 / 平移画布后仍精确跟随;line/arrow/path 等绝对坐标元素按坐标语义整体平移,不会双重偏移)
  • 整理(左侧选中悬浮栏 ✨ 按钮):智能识别手绘形状并完善为标准图形——闭合路径按形状识别为圆 / 椭圆 / 矩形(支持旋转)/ 三角形 / 四边形 / 五边形等标准元素,近似直线转为标准线段,其余弯曲线条做拉直简化(Douglas-Peucker,容差 5px);保留颜色与粗细,可继续拖动调整(画笔笔迹以原始采样点为识别源,识别为椭圆/直线后可直接编辑)
  • 手绘风格(左侧选中悬浮栏 ✎ 按钮):选中标准图形(矩形 / 椭圆 / 直线 / 箭头 / 多边形)一键转为 rough.js 手绘外观(双线 + 抖动描边),抖动 seed 随元素保存、撤销重载后完全可复现;AI 感知时能识别出原始几何形状;对已手绘元素重复点击自动跳过;选中已手绘元素可在样式浮层调整粗糙度(0–2,同一 seed 重绘)
  • 线性元素点编辑:选中直线 / 箭头 / 多边形后显示可拖拽的点手柄,拖动端点实时改变形状;双击线段中部添加新顶点;支持闭合路径 / 锁定角度(Esc 或切换工具退出)
  • 箭头端点绑定:箭头端点靠近其他元素边缘时自动吸附绑定,拖动被绑定元素时箭头端点跟随移动,绑定关系随文件保存恢复;AI 流程图生成的连线自动绑定节点矩形(节点移动连线跟随)
  • 框架元素F 键):创建虚线框(淡填充,类 Figma Frame);拖动框架整体移动时,框内元素跟随移动(元素完全落入框架即自动归属,包括拖入的元素;组关系 / 锁定元素除外),随文件保存恢复
    • 内容框架:拖拽 MD / 代码 / 文本文件到画布或右侧栏「导入文件」选择文件,生成内容型框架——按内容自适应尺寸(autoSize,长行自动折行,代码类型等宽字体渲染),内容随框架移动 / 缩放 / 旋转 / 删除联动,随文件保存恢复;拖入图片直插画布、拖入 PDF 自动渲染首页为图片(pdf.js 懒加载,长边上限 3000px)
      • 折叠与滚动:超高内容框架可折叠(固定高度裁剪,右键「折叠内容」开关),鼠标悬停在框架上滚轮滚动查看内容,滚动偏移随文件保存恢复
      • 框架聚焦:右键菜单「聚焦框架」视口放大到框架(再次操作退出聚焦恢复原视图,会话级)
    • 框架互转与内容约束(右键菜单):矩形 ⇄ 框架一键互转(转矩形时归属内容解除关联保留为自由元素);框架可开关「内容约束」——开启后框内绘制与拖动夹紧到框架边界;在框架内绘制 / 导入 / 拖入的元素自动归属框架(随框架移动 / 缩放 / 旋转联动,拖出框架自动解除归属,SVG 导出时展开为世界坐标)
  • 画布网格(⚙ 设置):可开启网格显示与绘制 / 移动吸附,间距 4–100px 可调(默认关闭);开启吸附后新建图形、框内拖动与单选移动均对齐网格线(多选移动不吸附,保持相对位置),网格线随缩放 / 平移自动重建
  • 画布缩放:自由缩放 10% ~ 800%;初始视图画布原点 (0,0) 居中显示在视口中心(X0Y0 居中),还原缩放时回到该视图
    • 滚轮:以鼠标所在位置为中心,向上放大 / 向下缩小
    • 状态栏按钮: 缩小 / 100% 还原 / 放大(还原同时复位画布平移)
    • 快捷键:Ctrl+= 放大、Ctrl+- 缩小、Ctrl+0 还原
    • 状态栏实时显示当前百分比
  • 撤销 / 重做Ctrl+Z / Ctrl+Shift+Z(或 Ctrl+Y);右下状态栏提供 ⬅ / ➡ 按钮
  • 多项目管理(⚙ 设置 → 项目):可创建 / 切换 / 重命名 / 删除多个项目,每个项目独立画布与自动保存;启动自动恢复上次打开的项目,旧版单项目数据自动迁移为「项目一」;状态栏左侧显示当前项目名;存储目录可在 ⚙ 设置 →「数据」页签更改(默认系统应用数据目录,更改后旧数据自动迁移到新目录,重启自动恢复)
  • 存储:自动保存到当前项目(桌面端写入数据目录——默认 %APPDATA%/com.miniboard.app,可在 ⚙ 设置 →「数据」页签更改,更改时自动迁移项目文件与 AI 自定义工具;浏览器端写入 localStorage);项目数据与 AI 自定义工具同目录(projects/index.json + 场景文件、custom-tools.json);打开 / 另存为 JSON 文件;统一导出入口(右侧悬浮栏“导出”按钮或命令面板 → 弹窗选择 PNG 位图 / SVG 矢量图 / PDF 文档,元素结构无损,适合交付 / 打印 / 二次编辑)

界面布局

Excalidraw 同款布局,多区域悬浮控件互不遮挡:

  • 顶部中央工具栏(常驻):全部绘图工具(含“形状▾”/“选择▾”分组下拉)+ 默认样式入口(sliders 图标 + 当前描边色圆点,打开样式浮层)+ 填充开关(纯图标,与其他按钮对齐);窗口过窄时末尾工具自动折叠进“更多▾”菜单(激活工具同步高亮);布局可在 ⚙ 设置 →「工具栏」页签自定义(勾选平铺 + 拖拽排序 + 分组调序与自定义分组 + 实时预览,localStorage 持久化)
  • 左侧选中悬浮栏(选中元素时出现;画笔工具激活时仅显示样式按钮,可预设新笔迹的默认颜色/粗细):✨ 整理 / ✎ 手绘 / 🎨 样式(描边/填充双通道色板、取色器、粗细滑块 1–40;按钮随元素类型差异化——图片 ✂️ 裁剪、线性元素点编辑、文本对齐/字体/字重、箭头端点按钮、手绘元素粗糙度滑条)
  • 右侧圆形悬浮工具栏(常驻):📂 打开 / 💾 保存 / 📄 导入文件(内容框架) / 🖼️ 插入图片 / ⬇ 导出(弹窗选 PNG / SVG / PDF)| 🤖 AI 助手 | 🗑 清空 / ⚙ 设置(外观 + 画布网格 + AI 模型 + AI 工具管理 + 系统提示词 + 数据存储目录),按钮按 文件 / AI / 清理 三段分隔线分组;主按钮可拖拽移动(位置记忆在 localStorage,恢复与窗口缩放时自动夹回视口内);鼠标移开延迟收起防误收;AI 面板打开时自动淡出让位
  • 右下角状态栏(半透明底栏,浅色主题下自动切换为浅色半透明底):当前项目名 + 元素数 + 光标画布坐标,右侧 ⬅ 撤销 / ➡ 重做 / 🔍 − 100% +
  • 悬浮内容互斥:右键菜单 / 样式浮层 / 右侧面板互斥,打开其一自动收起其他;Esc 逐层退出(点编辑 → 图片裁剪 → 编辑框 → 浮层),点击空白处或失焦关闭浮层

FAQ

Q:AI 助手连不上? A:先在 ⚙ 设置 → AI 模型 页签点「测试连接」。常见原因:接口地址不是 /v1 结尾、Key 错误、模型名不存在。本地 Ollama 用 http://localhost:11434/v1

Q:数据存在哪里?怎么备份? A:见上方 数据存储 章节。默认 %APPDATA%\com.miniboard.app\,关闭应用后复制该目录即可完整备份。

Q:更改数据目录后原来的数据还在吗? A:在。更改目录时旧数据会自动复制到新目录(迁移期间请勿关闭应用),原目录文件保留,确认无误后可手动删除。

Q:浏览器调试和桌面版数据互通吗? A:不互通。浏览器版数据存 localStorage,桌面版存文件目录,两者相互独立。

Q:AI 生成的工具会破坏画布吗? A:不会。工具生成器经过三层防护:危险代码静态扫描 → 隔离 Worker 执行 + 超时熔断 → 返回值格式强校验,且只允许纯 JavaScript 数学计算(不能访问页面 / 网络 / 循环)。

About

Local-first, fully offline hand-drawn whiteboard with AI assistant. Tauri 2 + leafer-ui, data stored on your own disk.

Topics

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages