把一张图片,变成能直接开拼的拼豆图纸,并管好从选料、拼制到发布的全过程。以微信小程序为核心交付。
PinBean 是一个面向拼豆(perler beads / 拼豆豆)爱好者的工具:上传图片 → 自动生成像素化拼豆图纸 → 给出制作所需的尺寸、颗数、颜色、分板、耗时与备料清单 → 一键生成小红书 / 抖音发布文案与封面。目标是把用户从「生成图纸」一路带到「买豆、分板、开拼、发布」,而不是停在出一张图。
市面拼豆软件的常见痛点:颜色识别不准、灰色毛边、无法合并相近色系、手动着色困难、没有采购清单、导出受限。PinBean 在优化这些的基础上,进一步补上了「制作管理」和「内容发布」两段常被忽略的环节。
制图
- 图片上传、可调粒度像素化、相近色合并、多色号系统(MARD / COCO / 漫漫 / 盼盼 / 咪小窝)
- 自动去背景、手动着色 / 橡皮擦 / 颜色替换
- Web 专属交互:自定义生成调色板、放大镜、Focus 制作视图;不代表微信/H5 主客户端已有相同界面
- Web AI 图片优化:通过自有 Node API 代理调用火山引擎「即梦」,真实 provider 成功路径需独立账号验收;不是小程序本地制图的前置条件
制作管理(PinBean 的重点)
- 生成后自动评估:难度、图纸尺寸、颗数、用色、预计耗时、拼板数量
- 备料清单(按约 8% 损耗向上取整)、一键复制
- 29×29 标准板分板计划与推荐制作顺序
- 按色号 / 分板标记制作进度,本地保存,可复制制作进度与复盘文案
发布
- 一键生成发布文案(成品展示 / 制作教程 / 挑战记录三种模板)
- 生成 3:4 小红书封面图与发布包(标题 / 首图 / 正文 / 标签 / 发布前检查清单)
PinBean 不只做「图片转像素格」,而是覆盖四段连续工作:选题 → 制图 → 制作 → 发布,让工具服务内容增长。每个新功能都必须能进入「生成图纸 → 制作 → 发布」的真实链路,而不是堆叠算法参数。完整设计见 docs/PINBEAN_SYSTEM_BLUEPRINT.md。
apps/miniapp-uni/:Vue 3 + TypeScript 的微信小程序/H5 客户端(当前主交付目标)v1分支:保留已退役的原生微信小程序完整源码;main不再携带旧版源码apps/web/:Next.js 网页工作台与交互参考;共享行为以 Core 契约、测试和批准的 Golden Fixtures 为准,不以 Web 差异自动定标准packages/bead-core/:跨平台图案生成、编辑、历史与项目核心packages/palette-data/:Web 与 uni-app 共用的供应商色号映射color-palette/:原始色板资料docs/:规划、对齐文档、系统蓝图archive/:历史备份与阶段性报告(不参与当前开发)
当前使用根 Git 仓库和 npm workspaces 统一管理。packages/bead-core/ 已成为生成、数值网格、色板身份、编辑事务、撤销/重做、去背景、统计、项目序列化、备料、29×29 分板、制作评估和进度的共享事实来源。Web 和 uni-app 通过 Adapter 消费共享 Core;Canvas、文件、相册、分享和浏览器下载只作为平台能力。apps/miniapp-uni/ 是当前微信/H5 主客户端,已经覆盖图片选择、共享 core 双模式生成、Canvas 预览、统计、画笔、橡皮、填充、整色替换、吸管、连续画笔、完整供应商色板补色、统一撤销/重做、去背景、最后一张图纸自动恢复,以及原版导出区的网格/纯净切换、详细设置、纯图纸、色卡图纸、备料清单、29×29 分板图纸、分板合集和 PinBean 项目文件导入导出。制作管理已经支持难度/耗时/板数评估、推荐制作顺序、按色号和分板标记进度、精确图案版本本地恢复、随项目文件迁移、复制制作计划与进度/完成复盘,以及只导出未完成分板;备料清单同步显示已完成与待拼状态。发布助手支持挂件/礼物/照片/大图用途预设、成品展示/制作教程/挑战记录三种文案、完整发布包和 1080×1440 的 3:4 发布封面;用途随项目文件保存。作品可以独立命名,名称统一进入项目文件、图纸、清单、分板与发布封面文件名;最近制作保留最多 8 个稳定项目记录,同一作品编辑后更新原记录而不重复。旧原生微信小程序完整保留在 v1 分支,main 不再携带旧版源码,也不再将其纳入根 workspace、根测试或生产入口。切换审计与微信平台待验证项见 uni-app 微信入口切换审计。原 Web/Native Git 历史和迁移恢复方式见 monorepo 迁移记录。
- uni-app + Vue 3 + TypeScript + Pinia(
apps/miniapp-uni/,新客户端) v1分支中的微信原生小程序(历史行为与平台参考,不存在于main工作树)- Next.js + TypeScript + Tailwind CSS + Canvas API(
apps/web/网页版参考实现,图像像素化与颜色映射在浏览器端完成,AI 通过自有 Node 服务端 API 代理) - 火山引擎「即梦」AI(图片优化)
小程序
- 在仓库根目录运行
npm run build:mp-weixin --workspace=apps/miniapp-uni - 用微信开发者工具打开仓库根目录(
project.config.json已指向apps/miniapp-uni/dist/build/mp-weixin/) - 首页路径为
pages/index/index
uni-app 新客户端
npm run check:uni
npm run dev:h5 --workspace=apps/miniapp-uni微信构建产物位于 apps/miniapp-uni/dist/build/mp-weixin,该目录由构建生成且不提交 Git。需要热更新时运行 npm run dev:mp-weixin --workspace=apps/miniapp-uni,并在开发者工具中改用对应的 dist/dev/mp-weixin 产物;提交前仍以 production build 验证。
网页版
npm ci
npm run dev:web
npm run check:web
npm run build:web
npm run start:web -- -p 3000自有 Node 服务器部署见 apps/web/docs/self-hosted-node-deployment.md。
从仓库根目录执行验证(CI 固定 Node 24.13.0 / npm 11.4.2,满足锁文件中 Linux lzma 的 ^24.12、ESLint 10 的 >=24 与 Playwright >=20 约束):
npm ci
npm test # Core、palette、Web、uni 单测;uni 复用前序构建,不重复 pretest
npm run check # 全仓类型、lint、测试、fixtures 与各端构建
npm run check:core # 单独检查 Core
npm run check:uni # 单独检查 uni-app
npm run check:web # 单独检查 Web完整 H5 smoke(会启动浏览器,必须由负责浏览器验收的操作者运行):
npm run check # 或 build:core、build:palette、build:uni:h5 依次构建
node node_modules/playwright-core/cli.js install chromium # 已有 Chrome 可省略
npm run test:h5:full完整 runner 使用临时生成的 50×50 不透明双色夹具,分别以 cartoon、realistic 执行编辑、导出、持久化、项目、进度、发布、最近制作和复盘全部八个 smoke 开关。默认在空闲 loopback 端口托管 dist/build/h5,结束时关闭服务;每种模式使用独立浏览器上下文,日志、PNG 和项目文件保存在输出所示的系统临时目录。设置 PINBEAN_SMOKE_ARTIFACT_DIR 可改产物目录,PINBEAN_H5_URL 可使用外部已启动服务(runner 不会关闭该服务)。完整模式固定夹具,不使用 PINBEAN_SMOKE_IMAGE 覆盖,以保持精确统计断言。
Chrome 查找支持 Windows 标准安装目录、Linux PATH、macOS Applications 和 Playwright Chromium 缓存;CHROME_PATH 优先且必须是可执行文件路径。例如 PowerShell 使用 $env:CHROME_PATH='C:\Program Files\Google\Chrome\Application\chrome.exe',bash 使用 export CHROME_PATH='/usr/bin/google-chrome'。单模式基础 smoke 使用 npm run test:h5:smoke,需自行提供 H5 服务;通过 PINBEAN_SMOKE_MODE、PINBEAN_SMOKE_IMAGE 调整模式与输入,完整业务分支的固定统计断言不适用于任意自选图片。
.github/workflows/check.yml 定义干净 npm ci、根 check、Chromium 安装与完整 H5 smoke,并保留七天产物,不配置真实 provider 凭据。新增 runner/CI 在本轮仅做静态检查,尚未作为新实现验收证据。H5 的真实浏览器下载不等于微信相册交付;npm run test:wechat:smoke 是包含平台 API mock 的业务链检查,reLaunch 不等于冷进程重启,真机 gate 见切换审计。
只维护根目录的 package-lock.json,不要在子目录重新创建锁文件。算法规则见 Bead Core V1。
- experience.md:记录重构过程中已经验证的工程经验、踩坑和证据边界,包括共享 Core、Golden Fixtures、微信自动化、Android 兼容、导出设计、时间估算和 50 图回归。开始相近任务前先查这里,避免重复踩坑或把自动化结果写成真机结论。
- 记录.md:按大版本连续记录项目从 Git 保护、monorepo 整合、Web/Core 接入到 uni-app、真机和导出回归的完整演进。需要了解“当前方案为什么这样做”和历史检查点时从这里开始。
这两份文件都属于当前项目知识,不是归档材料。完成功能、修复重要问题或形成新的验证结论后,应随代码检查点同步更新。
伙伴或伙伴的 Agent 接手任务前,先阅读 多 Agent 协作交接协议,并结合上面的 experience.md 与 记录.md 理解已有决策。协作协议固定了目录职责、Git 分支与提交规则、跨端逻辑归属、测试门禁、权限边界、PR 模板和一段可直接转发的 Agent 启动提示词。
- 网页版参考实现与核心像素化算法基于开源项目 Zippland/perler-beads 与 liangdabiao/perler-beads-ai(Apache 2.0)。
- 本仓库的原创工作:微信小程序端实现,以及 PinBean 产品系统设计——把单一的图纸生成扩展为「选题 → 制图 → 制作 → 发布」闭环,补齐制作评估、备料分板与内容发布层。