GrobPaint:介于MS Paint和Paint.net之间。默认跨平台。
Show HN: GrobPaint: Somewhere Between MS Paint and Paint.net

原始链接: https://github.com/groverburger/grobpaint

GrobPaint 是一款轻量级、跨平台的图像编辑器,旨在填补 Paint.NET 缺乏 macOS 支持的空白。它使用 Web 技术(纯 JavaScript)和最简 Python 后端构建,提供诸如图层、16 种混合模式以及各种选择和绘图工具等基本功能——而无需像 Photoshop 这样复杂的程序。 主要功能包括对 PNG、JPEG、BMP 和 GIF 文件的支持、选项卡式多文档界面以及 .gbp 项目文件,该文件将图层存储为 ZIP 压缩包。它具有缩放和画布调整大小等图像操作功能,并采用简单、无依赖项的构建过程。 GrobPaint 可以作为原生窗口运行(可选 `pywebview`),也可以直接在浏览器中运行。它优先考虑易用性和精简的体验,旨在以紧凑的软件包(大约 2500 行代码,分为专注的 JavaScript 模块)提供“你真正需要的工具”。

## GrobPaint:一款新的像素图形编辑器 GrobPaint是一款新的图形编辑器,旨在填补MS Paint和Paint.net之间的空白,最近在Hacker News上分享。该项目由__grob开发,目前正在积极开发中,已经实现了诸如魔棒工具(包括连续/全局选择和容差控制)等功能。 讨论中,人们表达了对Paint.net替代品的需求,尤其是在MacOS上,Pinta和Krita也被提及,但用户认为它们速度较慢。开发者鼓励通过GitHub issues和pull requests提供反馈和贡献。 有趣的是,该项目名称“Grob”让人联想到旧款HP 48G计算器上使用的像素化图形(“GROBs”),这是一种巧合,因为该名称源自开发者的用户名GroverBurger。 此外,关于技术栈也存在争论,一些人建议使用Electron,而另一些人则反对再增加一个Electron应用到生态系统中。
相关文章

原文

Somewhere between MS Paint and Paint.NET. Multiplatform by default.

Paint.NET doesn't run on macOS. GrobPaint fills that gap: a lightweight image editor with layers, blend modes, and selection tools, built with web technologies and a tiny Python backend. The goal isn't to clone Paint.NET or compete with Photoshop. It's to have the tools you actually need without the bloat.

Python Platform License

GrobPaint screenshot
  • Layers - add, delete, duplicate, merge, reorder, per-layer opacity and blend modes (16 modes)
  • Tools - Pencil, Brush, Eraser, Fill, Eyedropper, Line, Rectangle, Ellipse, Text, Select, Magic Wand, Move, Rotate, Scale, Mirror
  • Selection - rectangular and magic wand with configurable tolerance, copy/cut/paste, crop to selection
  • Color - HSV picker, RGB/Hex input, alpha channel, palettes (Lospec 500, PICO-8), swap primary/secondary
  • Canvas - zoom (scroll wheel, pinch, keyboard), pan (space+drag, middle-click, trackpad), fit-to-view, grid overlay
  • File I/O - PNG, JPEG, BMP, GIF; native .gbp project format preserves layers as a ZIP archive
  • Sprite sheets - split a sheet into layers, or export layers as a horizontal sheet
  • Image operations - scale (nearest/bilinear/bicubic), canvas resize with anchor, flip, flatten
  • Multi-document - tabbed interface, multiple images open at once
  • Clipboard - paste images directly from clipboard as new layers

This launches a native window using pywebview. If pywebview isn't installed, it falls back to your default browser.

To force browser mode:

python grobpaint.py --browser

Dependencies:

  • Python 3.9+
  • pywebview (optional, for native window) - pip install pywebview

No npm, no bundler, no build step. The frontend is vanilla JS with ES modules.

Produces dist/GrobPaint.app (macOS) or dist/GrobPaint/GrobPaint (binary) via PyInstaller.

You can also open index.html directly or serve it with any static file server. File dialogs won't be available, but the editor falls back to browser file input and download for open/save.

Shortcut Action
P B E F I L R O T S W M Tool hotkeys
[ / ] Decrease / increase brush size
X Swap primary/secondary colors
+ / - Zoom in / out
Ctrl+0 Fit in view
Ctrl+1 Actual size (100%)
Ctrl+N New image
Ctrl+O Open file
Ctrl+S Save
Ctrl+Shift+S Save as
Ctrl+Z / Ctrl+Shift+Z Undo / redo
Ctrl+C / Ctrl+X / Ctrl+V Copy / cut / paste
Ctrl+A / Ctrl+D Select all / deselect
Ctrl+G Toggle grid
Delete Delete selection
Space + drag Pan canvas

.gbp files are ZIP archives containing:

manifest.json       # dimensions, layer metadata (name, opacity, visibility, blend mode)
layers/
  layer_0.png
  layer_1.png
  ...

The app is ~2500 lines of vanilla JavaScript split across four modules:

File Role
js/core.js EventBus, Layer, History (swap-based undo/redo), PaintDocument, Selection
js/renderer.js Compositing engine, checkerboard background, zoom/pan, grid overlay
js/tools.js All tools, flood fill, flood select, Bresenham line
js/ui.js Color system, HSV picker, layers panel, document tabs, menus, dialogs
js/app.js App init, canvas events, keyboard shortcuts, file I/O
grobpaint.py Python HTTP server + pywebview launcher, native file dialogs

No frameworks, no dependencies beyond one CDN include (JSZip for browser-side .gbp support).

GrobPaint was built with significant help from Claude by Anthropic.

联系我们 contact @ memedata.com