从“PS 太重、很多功能用不上、还要付费”这个需求出发,记录一个离线可用、轻量免费、AI 友好的图片编辑器原型。
摘要
P-Shoot 是一个基于 Web 技术栈构建的轻量图像编辑器原型,核心动机是解决 Photoshop 对很多日常编辑场景过重、功能冗余且有付费门槛的问题。项目的目标不是完整替代 PS,而是提供一个免费、可全离线保持主要功能、并且对 AI 自然语言操作更友好的本地编辑工作台。当前项目已支持文档、图层、选区、蒙版、历史记录、工程文件、本地 AI 去背景和原子化 AI 命令等能力。
P-Shoot 的出发点很实际:Photoshop 足够强,但对于很多轻量图片处理需求来说,它启动和使用成本都偏高,大量专业功能平时用不上,订阅或购买成本也会形成门槛。如果只是做日常修图、基础抠图、图层叠加、简单文字和导出,一个更轻量、免费、离线可用的工具会更合适。
同时,新的图片编辑方式正在变得更自然:很多操作不一定要通过一层层菜单完成,而可以通过自然语言描述,再映射到可解释、可撤销的编辑动作。P-Shoot 目前仍是原型阶段,但它的定位已经很清楚:先验证一个本地优先、轻量免费、AI 亲和的编辑器底座,而不是做一个功能堆满但难以维护的巨型软件。
1. 项目背景与目标
P-Shoot 的基本目标是构建一个运行在浏览器和桌面壳中的图像编辑器原型。它优先覆盖常见图片编辑需求,而不是追求把 Photoshop 的全部专业功能搬过来。普通功能可以直接通过 index.html 运行;涉及本地 AI 和 WASM 的能力,则通过项目内置的开发服务提供正确的 MIME 类型和跨源隔离响应头。桌面端通过 Electron 进行封装,后续可以继续面向 Windows、Linux 和 macOS 扩展。
项目采用本地优先的设计思路:用户素材尽量留在本机,编辑行为围绕前端状态和本地资源完成,AI 模型也尽量以离线方式接入。需要联网的部分主要是可选的云端大模型 API 调用;如果不使用这类云 API,编辑器仍然可以保持完整的基础编辑能力。这种路线让隐私边界更清楚,也更适合图像编辑这类需要频繁交互和即时反馈的场景。
- 轻量免费:优先覆盖高频图片处理需求,避免把不常用的专业功能变成使用负担。
- 全离线优先:基础编辑、本地模型和工程文件都尽量在本机完成,云端大模型调用是可选增强。
- AI 亲和:把编辑动作拆成 applyAdjustment、applyFilter、addText 等原子操作,方便自然语言调用和撤销。
- 可扩展架构:把文档状态、渲染、工具行为、文件 IO 和平台能力拆开,降低后续扩展成本。
2. 当前界面与工作流

图 1:P-Shoot 的主工作区,已经具备菜单栏、AI 栏、工具栏、画布区和右侧 Studio 面板。
当前界面采用典型的图片编辑器布局:顶部是菜单栏和文件操作区,中间是 AI 命令栏和工具选项栏,左侧是工具栏,中央是画布工作区,右侧是属性、图层、历史、调整、抠图、fx 和滤镜等面板。这个布局的重点不是视觉装饰,而是让常见编辑流程能在同一工作区内完成。
从功能闭环看,P-Shoot 已经支持新建文档、导入图片、创建和编辑图层、绘制、文字、形状、选区操作、撤销重做、保存 .pshoot 工程,以及导出 PNG、JPG 和 WebP。它还不是完整的生产工具,但已经具备可演进的编辑器雏形。
和 Photoshop 这类成熟专业软件相比,P-Shoot 更适合把常用操作做轻:打开快、依赖少、功能集中,不要求用户为了少量修图需求接受完整商业软件的体积和成本。它的目标不是覆盖所有专业影像流程,而是把最常用的一批能力做成一个免费、离线、可继续扩展的工作台。
相比单纯的绘制工具,P-Shoot 更值得关注的是图层、选区和蒙版的组合能力。图层支持命名、显隐、不透明度、混合模式、锁定、编组、链接、蒙版和合并;选区支持矩形、椭圆、反选、羽化、扩展、收缩、填充、描边和复制;蒙版可以从选区生成,也可以被画笔和橡皮继续编辑。
3. 整体架构设计

图 2:P-Shoot 当前的模块关系,应用装配层把 UI、核心模型、渲染、IO 和本地 AI 资源串起来。
项目已经从单文件原型拆分为多个职责明确的目录。src/app 负责应用装配和事件调度;src/core 承载文档、图层、选区、历史和命令等核心模型;src/renderer 负责 Canvas 2D 合成和覆盖层绘制;src/io 处理工程保存与恢复;src/platform 收敛浏览器平台能力;src/ui 和 src/ai 分别承接界面组件与 AI 命令链路。
当前渲染层仍以 Canvas 2D 为主,这是一个阶段性取舍。图像编辑器的瓶颈不只在像素计算,状态模型、图层关系、选区边界和历史提交同样会影响系统稳定性。前期保留 Canvas 2D 可以降低实现复杂度,便于调试图层合成、蒙版预览和选区覆盖;后续再把高负载合成、滤镜和大图预览迁移到 WebGL。
3.1 模块边界
- 应用层:src/app/editor-app.js 连接状态、渲染器、DOM、IO 和工具行为,是当前业务调度中心。
- 核心层:src/core 下的 document、layers、selection、history、commands 和 state 负责编辑器数据模型。
- 渲染层:src/renderer/canvas2d.js 负责图层合成、选区虚线、快速蒙版红色覆盖和变换框。
- 平台与 IO:src/platform 处理浏览器能力适配,src/io 负责 .pshoot 工程的序列化和恢复。
4. 核心模块实现
4.1 图层系统
图层是整个编辑器的核心数据结构。当前每个图层包含可见性、锁定状态、透明度、混合模式、位移、画布、上下文、蒙版画布、剪贴关系、编组关系和链接关系等字段。这样的结构可以支撑图层排序、复制、合并、锁定、联动移动、剪贴蒙版和图层蒙版等操作。
4.2 选区与蒙版
选区系统目前支持矩形、椭圆、反选、羽化、扩展、收缩、移动、填充、描边、复制和清除等操作。更关键的是,选区已经接入图层和蒙版流程:可以从当前选区生成图层蒙版,也可以从图层或蒙版重新载入选区。这让选区不再只是一个界面覆盖层,而是成为编辑模型的一部分。
快速蒙版提供了一个更接近真实修图流程的入口。进入快速蒙版后,界面显示红色覆盖层,用户可以用画笔或橡皮修改区域;退出时,结果优先应用到当前活动图层的蒙版。修边过程中还可以把连续操作合并成一次历史提交,避免每一笔都写入历史栈。
4.3 历史记录与工程文件
历史系统当前以快照方式实现,优点是简单可靠,能够支撑撤销和重做;缺点是大文档和多图层场景下会带来内存压力。工程文件方面,.pshoot 会保存文档尺寸、当前图层、多选状态、选区状态、图层像素、蒙版像素、图层关系和快速蒙版内容,为后续继续扩展提供了基础。
5. 本地 AI 与自然语言命令

图 3:AI 原子命令面板,展示了 applyAdjustment、applyGradient、addText 等可解释的编辑动作。
P-Shoot 的去背景能力使用本地 onnxruntime-web、rembg-web 和 U²-Net 系列模型,不依赖云端 API。换句话说,抠图、图层、选区、蒙版、导入导出和工程保存这些核心能力都可以在离线状态下完成。为了让 WASM 和 ONNX 资源在浏览器环境中稳定运行,项目提供了 scripts/dev_server.py,用于处理 .mjs、.wasm 的 MIME 类型,以及 COOP、COEP 等跨源隔离响应头。
从产品流程上看,去背景并不是一个一次性黑盒按钮。自动分割只能给出初始结果,用户仍然需要通过“保留主体”“去掉区域”“完成修边”等操作处理边缘细节。这样的设计更接近实际修图流程:AI 负责降低初始成本,人工继续控制最终质量。
AI 命令栏则面向更通用的自动化能力。当前命令体系已经开始向原子操作靠拢,例如 applyAdjustment、applyFilter、addText、setBrush、setBackground 等。自然语言可以先被解析成这些明确动作,再由编辑器执行。云端大模型 API 可以提升理解复杂指令的能力,但它不是基础功能的前置条件;不联网时,用户仍然可以使用本地编辑和本地 AI 能力。

6. 当前能力与后续规划
从项目状态看,P-Shoot 已完成架构重整和基础可用版,正在继续推进图层、选区、变换、蒙版和 AI 相关能力。当前已经具备可演示的工作流,但要进入更稳定的编辑器阶段,还需要继续补性能、非破坏编辑链、文字系统、滤镜参数化和工程兼容性。
| 层面 | 当前已经跑起来的能力 | 下一阶段更值得投入的方向 |
| 编辑底座 | 文档、画布、撤销/重做、工程保存、导入导出 | 差量历史、关键帧快照、工程兼容性 |
| 图层工作流 | 多图层、缩略图、显隐、透明度、混合模式、锁定、编组、链接、合并 | 更完整的非破坏编辑链和智能对象 |
| 选区与蒙版 | 矩形/椭圆选区、羽化、反选、图层蒙版、剪贴蒙版、快速蒙版 | 对象选择、主体识别、更多专业边缘处理 |
| AI 与自动化 | 本地去背景、修边流程、原子命令面板;云端大模型 API 可选 | 把计划执行链做成可解释、可撤销、可复用的动作系统 |
| 渲染性能 | Canvas 2D 合成、覆盖层预览、清晰模块边界 | 局部刷新、Worker 化、WebGL 合成和滤镜 GPU 化 |
当前限制也比较明确:渲染仍以 Canvas 2D 为主,大图、多图层和高频重绘还不是最终形态;历史记录仍偏快照式,后续需要差量化;文字和矢量还不是完整专业系统;滤镜和调整已有基础能力,但还没有完整参数链和智能滤镜;色彩管理、智能对象、动作批处理和 PSD 深兼容也都属于后续阶段。
7. 总结
P-Shoot 的价值不是做一个“更大的 PS”,而是反过来做减法:保留日常图片编辑最常用的能力,去掉对轻量场景来说过重的部分,并尽量做到免费、离线和可扩展。当前最重要的进展,是已经把图像编辑器的核心骨架拆出来:文档状态、图层模型、选区语义、蒙版工作流、渲染覆盖层、工程持久化和本地 AI 资源都有了明确落点。
后续最值得优先投入的方向,是把历史系统从快照逐步升级为命令加关键帧,把渲染链路从全量刷新逐步优化为局部刷新和图层缓存,把高频合成与滤镜迁移到 WebGL,并继续补齐非破坏编辑、文字排版和智能对象等专业能力。这样 P-Shoot 才能从原型继续向真正可用的编辑工具演进。

Comments NOTHING