Repository navigation
Releases: vancevoj/paint.c
Release list
paint.c 0.1.3
paint.c 0.1.3
A packaging fix release of
paint.c 0.1.2
(its notes: packaging/RELEASE_NOTES_0.1.2.md). The program itself is
unchanged.
paint.c is an independent clean-room project. It is not affiliated with
or endorsed by dotPDN LLC; Paint.NET is their trademark.
Install
Linux with Flatpak: install paint.c
(open it with GNOME Software or KDE Discover; updates then arrive with your
other apps), or
flatpak install --user https://vancevoj.github.io/paintc-flatpak/io.github.vancevoj.paintc.flatpakref.
Installed copies of 0.1.2 from that repository update to 0.1.3 on their own.
Downloads
| File | For |
|---|---|
paintc-0.1.3-linux-x86_64.flatpak |
Linux x86_64 with Flatpak, without the repository (no automatic updates); the runtime (org.freedesktop.Platform 26.08) comes from Flathub |
paintc-0.1.3-linux-x86_64.AppImage |
Linux x86_64 with glibc 2.31 or newer (Ubuntu 20.04, Debian 11, Fedora 32 and later), Wayland or X11 |
paintc-0.1.3-windows-x64-setup.exe |
Windows 10 22H2 or Windows 11, x64: installer with Start menu entry and file associations |
paintc-0.1.3-windows-x64-portable.zip |
the same program without installation |
paintc-0.1.3-source.tar.gz |
source code; macOS users build from it (docs/BUILDING.md, section macOS) |
SHA256SUMS.txt |
SHA-256 of every file above |
What changed
- The desktop entry no longer has the
SingleMainWindowkey, which
desktop-file-validate before 0.28 rejects (Ubuntu 24.04 and older, and
the AppImage catalog's checks). - The AppImage's own icon (
.DirIcon) is the 256 x 256 PNG instead of the
SVG, so file managers can show it as a thumbnail. The scalable icon stays
in the Flatpak and incmake --install.
Platforms and how they were verified
Same platforms as 0.1.0. Every CTest entry passes in the AppImage's Ubuntu
20.04 build container and under Wine for the Windows build. The AppImage
passes the AppImage project's appdir-lint.sh.
Checksums (SHA-256)
824bdb3ffcd3355775edb11a75c5c56e34d53f8b5491a92211551c0e6601662b paintc-0.1.3-linux-x86_64.flatpak
d5a96aefc0d8d3d41780a4baaa5e18ff0b6e6544eacaa4247c2c17e711810b65 paintc-0.1.3-linux-x86_64.AppImage
d2b4e5568dca64b2e7f3a95d08666a35f6ac55775189944ed6874166571216ce paintc-0.1.3-windows-x64-setup.exe
c562787ffdc1801ceff982640fe65f9aa78b6fbcdd4c2057f20cd034b4b00ce3 paintc-0.1.3-windows-x64-portable.zip
e858ad1f6bdb453762c1f263e9f4f17f1fea82ac7c72edb15ce2e83945bdbd3c paintc-0.1.3-source.tar.gz
SHA256SUMS.txt in the release has the same lines; check with
sha256sum -c SHA256SUMS.txt (Linux) or shasum -a 256 -c SHA256SUMS.txt
(macOS).
License and attribution
paint.c is MIT licensed (LICENSE). NOTICE carries the MIT attribution
of the algorithms re-implemented from Paint.NET 3.36. Every package has a
licenses folder with paint.c's license, the NOTICE and the license texts
of every bundled component, as in 0.1.0.
paint.c 0.1.2
paint.c 0.1.2
paint.c as a Flatpak. It changes the app id to
io.github.vancevoj.paintc, makes paint.c behave inside the Flatpak
sandbox and adds a Flatpak bundle to the downloads. Features, platforms
and known gaps are otherwise those of
paint.c 0.1.1
and 0.1.0
(their notes: packaging/RELEASE_NOTES_0.1.1.md, RELEASE_NOTES_0.1.0.md).
paint.c is an independent clean-room project. It is not affiliated with
or endorsed by dotPDN LLC; Paint.NET is their trademark.
Install
Linux with Flatpak: install paint.c
(open it with GNOME Software or KDE Discover; updates then arrive with your
other apps), or flatpak install --user https://vancevoj.github.io/paintc-flatpak/io.github.vancevoj.paintc.flatpakref.
The .flatpak file below installs the same build without the repository
(no automatic updates).
Downloads
| File | For |
|---|---|
paintc-0.1.2-linux-x86_64.flatpak |
Linux x86_64 with Flatpak: open it in GNOME Software or KDE Discover, or flatpak install --user paintc-0.1.2-linux-x86_64.flatpak; the runtime (org.freedesktop.Platform 26.08) comes from Flathub |
paintc-0.1.2-linux-x86_64.AppImage |
Linux x86_64 with glibc 2.31 or newer (Ubuntu 20.04, Debian 11, Fedora 32 and later), Wayland or X11 |
paintc-0.1.2-windows-x64-setup.exe |
Windows 10 22H2 or Windows 11, x64: installer with Start menu entry and file associations |
paintc-0.1.2-windows-x64-portable.zip |
the same program without installation |
paintc-0.1.2-source.tar.gz |
source code; macOS users build from it (docs/BUILDING.md, section macOS) |
SHA256SUMS.txt |
SHA-256 of every file above |
Installing and running otherwise work as in 0.1.0. Settings, recent files
and plugins of earlier versions are kept: their folders are named paintc
and do not depend on the app id. The Flatpak keeps its own settings under
~/.var/app/io.github.vancevoj.paintc/.
What changed
New app id
The app id is now io.github.vancevoj.paintc (ADR-025) everywhere it is
used: the desktop entry, AppStream metadata, icons and the MIME package on
Linux, the Wayland app id and X11 window class, the single instance name,
the macOS bundle identifier and the Windows assembly name. Effect ids keep
their org.paintc. prefix, so saved effect settings and plugins are
unaffected.
- Linux packages installed by hand (
cmake --install) leave the old
org.paintc.paintcdesktop entry, icons and MIME file behind; remove
them from the install prefix when you upgrade. - A paint.c 0.1.1 that is still running does not receive files opened with
0.1.2 (and the other way round), because the single instance name
changed.
Flatpak
- Opening a file while paint.c runs in the Flatpak now reaches the open
window. The single instance socket lives in the sandbox's shared runtime
folder ($XDG_RUNTIME_DIR/app/io.github.vancevoj.paintc): abstract
sockets, which paint.c uses elsewhere on Linux, do not cross the network
namespaces of separate sandboxes. - The Text tool lists the fonts installed on the host system and in the
user's font folder, which Flatpak exposes under/run/host. - The Flatpak manifest (
packaging/flatpak/io.github.vancevoj.paintc.yml)
targets the org.freedesktop.Platform 26.08 runtime and takes SDL3,
libavif and libjxl from it. The Flatpak sees the Pictures folder
directly and everything else through the file chooser portal, whose
files stay available to recent files after a restart. The optional
plugins go to
~/.var/app/io.github.vancevoj.paintc/data/paintc/plugins/.
Other
-
Builds with GCC 16 without warnings, and a new CMake option
PC_WERROR(default ON) lets distribution builds keep warnings from
failing the build (ADR-026). -
The Text tool logs how many font faces it found, or why the font scan
failed, to the log file. -
AppStream metadata with screenshots, links and branding colors for
software centers (packaging/screenshots/and
packaging/screenshots/make-screenshots.sh, which renders them). -
The script command list in
src/app/script.cnamesfitas a command of
its own (zoom fitzoomed to 1%).
Optional plugins
The ten optional plugins of the
plugins-v1.0.0 release
work with 0.1.2 unchanged. Install them as described in docs/PLUGINS.md;
the Flatpak's plugins folder is named above.
Platforms and how they were verified
Same platforms and system requirements as 0.1.0. Packages are built with
the local release pipeline (docs/PACKAGING.md, Local releases). Every
CTest entry passes on Linux in a GCC 14 Release build and in a GCC 16
build inside the Flatpak SDK 26.08 against its SDL 3.4.14. The Flatpak was
built with org.flatpak.Builder and checked in its sandbox: the self test,
a window on Wayland, opening a file into the running instance, saving over
a file handed in by the document portal and the host fonts in the Text
tool. macOS remains unverified on a Mac since the last green
macOS CI run (ADR-021).
Checksums (SHA-256)
f5ec3e355ebfdb075827318cd4ed52040e8b88ad73678f5a8934ede6961397b3 paintc-0.1.2-linux-x86_64.flatpak
0c46889da6fc1caef66169a0d9c8f39545d9efa9516cbd64bbbc66d865c0acd7 paintc-0.1.2-linux-x86_64.AppImage
66670f421415788e1e0386910171686a443921a118f1427f99f198a4f9fcd15e paintc-0.1.2-windows-x64-setup.exe
5d3b7754ba06b4ac18b058df7876af493d977ec316e43d6745143b13c15b7b69 paintc-0.1.2-windows-x64-portable.zip
05502bf2d242cbd19a6cde4bf595a5922869d481fec7231dbaf2c8172a24dfb2 paintc-0.1.2-source.tar.gz
SHA256SUMS.txt in the release has the same lines; check with
sha256sum -c SHA256SUMS.txt (Linux) or shasum -a 256 -c SHA256SUMS.txt
(macOS).
License and attribution
paint.c is MIT licensed (LICENSE). NOTICE carries the MIT attribution
of the algorithms re-implemented from Paint.NET 3.36. Every package has a
licenses folder with paint.c's license, the NOTICE and the license texts
of every bundled component, as in 0.1.0.
paint.c 0.1.1
paint.c 0.1.1
A maintenance release of paint.c 0.1.0: native Wayland on more Linux
desktops, a Display server setting, the plugin host features that the
optional plugins use, and a fix for a canvas that kept part of a closed
image on screen. Features, platforms and known gaps are otherwise those of
paint.c 0.1.0
(its notes: packaging/RELEASE_NOTES_0.1.0.md).
paint.c is an independent clean-room project. It is not affiliated with
or endorsed by dotPDN LLC; Paint.NET is their trademark.
Downloads
| File | For |
|---|---|
paintc-0.1.1-linux-x86_64.AppImage |
Linux x86_64 with glibc 2.31 or newer (Ubuntu 20.04, Debian 11, Fedora 32 and later), Wayland or X11 |
paintc-0.1.1-windows-x64-setup.exe |
Windows 10 22H2 or Windows 11, x64: installer with Start menu entry and file associations |
paintc-0.1.1-windows-x64-portable.zip |
the same program without installation |
paintc-0.1.1-source.tar.gz |
source code; macOS users build from it (docs/BUILDING.md, section macOS) |
SHA256SUMS.txt |
SHA-256 of every file above |
Installing and running work as in 0.1.0: chmod +x and run the AppImage
(--appimage-extract-and-run without FUSE); the Windows installer and
executable are not code signed, so SmartScreen warns on first start (More
info, Run anyway). Settings, recent files and plugins of 0.1.0 are kept.
What changed
Linux: native Wayland on more compositors
- SDL 3.2 and later run a program through XWayland when the Wayland
compositor lacks thewp_fifo_v1protocol, to protect the frame pacing
of games. That affected KDE Plasma (KWin before 6.4) and other
compositors without the protocol: paint.c 0.1.0 ran there as an X11
window. paint.c redraws only on demand, so on a Wayland session it now
asks for the native Wayland driver first, which brings fractional
scaling, pen input through the tablet protocol and crisp text. When
Wayland cannot be used it falls back to X11 as before. - Settings > Graphics > Display server chooses between Native
Wayland when available (the default) and X11 (XWayland on Wayland
sessions). The choice is stored asgfx.video_driver(waylandor
x11) and takes effect at the next start. TheSDL_VIDEO_DRIVER
environment variable still overrides both. Windows and macOS are
unchanged.
Plugin host: what the optional plugins need (effect ABI v1.2)
The effect interface grew by additions only (ADR-024): FX_ABI_VERSION
stays 1, plugins built for 0.1.0 keep working, and plugins that use the
new parts still load in 0.1.0, with the fallbacks named below.
- Effect notices: an effect can say why it left the image unchanged
(fx_host.notice), and paint.c shows the message in a message box, for
example Align Object with nothing to align, Bevel Object without an
object or Content Aware Fill without a selection. paint.c 0.1.0 leaves
the image unchanged without a message. - Position grid widget (
include/fx/fx_widgets.h, hint
position-grid): a 3 x 3 grid of position buttons, optional rows of
horizontal-only and vertical-only positions and a Reset position button,
usable by mouse and keyboard. Hosts without it, 0.1.0 included, show a
drop-down with the same choices. - Tooltips on check boxes, drop-downs and seeds through
tip:hints,
and values that apply to the live preview only (FXP_F_PREVIEW_ONLY):
they are reset for OK, Repeat and runs without a dialog. - The plugin guide (Help > Plugins, docs/PLUGINS.md) documents
fx_widgets.hwith the other plugin headers.
Fixed: canvas showing part of a closed image
After closing one image and opening another in the same session, part of
the new image's first 64 pixel tile row could stay transparent on screen,
or show pixels of the closed image, until those tiles were drawn again (an
edit there, or another zoom level). The image itself was never affected
(saving gave the right pixels). The page
textures that mirror the display cache told caches apart by their memory
address, and the new image's cache could be created at the address of the
closed one with tile stamps numbered the same way. Every display cache now
has an identity and stamps that are never reused in the process, and the
canvas keys its textures on them. Switching between open images and
undoing Image > Resize are covered by the same tests
(tests/app/test_canvas_docs.c, tests/core/test_mip.c).
Optional plugins
Ten effect plugins are available as separate downloads, not part of the
paint.c packages: AA's Assistant, Align Object, Bevel Object, Content
Aware Fill, Gradient Mapping, Grid / Checkerboard, Grim Color Reaper,
Perspective, Shape3D and Water Reflection, each a native re-creation of a
popular Paint.NET plugin that credits its original author.
- Download: the
plugins-v1.0.0 release
(one zip per plugin and system, orpaintc-plugins-all-1.0.0-<system>.zip,
withSHA256SUMS). - Install: unzip into the plugins folder (Linux
~/.local/share/paintc/plugins/, Windows%APPDATA%\paintc\plugins\)
and restart paint.c; details, the list with menus and versions, and how
to build them from source are in docs/PLUGINS.md. - They run best on paint.c 0.1.1, which has the notices and the position
grid widget described above.
Platforms and how they were verified
Same platforms and system requirements as 0.1.0: Linux x86_64 (glibc 2.31
or newer, Wayland or X11), Windows 10 22H2 and Windows 11 x64, and macOS
13 or newer built from source. Packages are built with the local release
pipeline of 0.1.0 (docs/PACKAGING.md, Local releases). Every CTest entry
passes on Linux in a GCC Release build, a Clang build and an AddressSanitizer
plus UndefinedBehaviorSanitizer build (leak checks on), with no compiler
warnings. macOS remains unverified on a Mac since the last green macOS CI
run (ADR-021).
Checksums (SHA-256)
38f5e77ef2a628b94d530b91eea7c481544c3a322317d9310588120555cce2b7 paintc-0.1.1-linux-x86_64.AppImage
7c172c94f20ce46f4db7ce7eb6be115b86d31347ddd4fc4fe3c9dd9a4d99b319 paintc-0.1.1-windows-x64-setup.exe
92ad395ba93dfc1ecf850bf9b51728eca9965caa3ea1320d2ea8c7f037943d1f paintc-0.1.1-windows-x64-portable.zip
05ca28f8cca809a5d63a7c4717a886b25cd85dcc6a69c204d751a6a76bc3309d paintc-0.1.1-source.tar.gz
SHA256SUMS.txt in the release has the same lines; check with
sha256sum -c SHA256SUMS.txt (Linux) or shasum -a 256 -c SHA256SUMS.txt
(macOS).
License and attribution
paint.c is MIT licensed (LICENSE). NOTICE carries the MIT attribution
of the algorithms re-implemented from Paint.NET 3.36. Every package has a
licenses folder with paint.c's license, the NOTICE and the license texts
of every bundled component, as in 0.1.0.
paint.c plugins 1.0.0
paint.c plugins 1.0.0
Ten optional effect plugins for paint.c, the
native C17 editor with the Paint.NET 5.1 workflow. Each one is a native,
independent re-creation of a popular Paint.NET plugin, made from its public
description (forum posts, help text, screenshots), or ported from source
its author published under a permissive license. Credit for the designs
goes to the original authors, named below and in each plugin's README.md.
These plugins are not affiliated with or endorsed by dotPDN LLC or the
original plugin authors; Paint.NET's own .NET plugins cannot be loaded by
paint.c.
Requires paint.c 0.1.1 or later; on 0.1.0 Align Object falls back to a
drop-down and effect notices are not shown.
The plugins
| Plugin | Menu | What it does | Original design and author | Basis | Download |
|---|---|---|---|---|---|
| AA's Assistant | Effects > Object > AA's Assistant | Smooths the jagged edge of a cut-out object so it blends into any background, and doubles as a simple alpha curve. | AA's Assistant by dpy, after an idea by Boude (original) | clean room re-creation | Linux / Windows |
| Align Object | Effects > Object > Align Object | Moves the object on a transparent layer to an edge, a corner or the center of the canvas or the selection. | Align Object by xod, helped by MJW (original) | clean room re-creation | Linux / Windows |
| Bevel Object | Effects > Object > Bevel Object | Gives an object on a transparent layer, or a selection, a raised and lit bevelled edge with an optional drop shadow. | Bevel Object and Bevel Selection by BoltBait (Bevel Selection with Ed Harvey) (original) | clean room re-creation | Linux / Windows |
| Content Aware Fill | Effects > Selection > Content Aware Fill | Removes an object or a blemish by filling the selection with texture synthesized from its surroundings. | Content Aware Fill by null54, after Resynthesizer by Lloyd Konneker and the research of Paul Harrison (original) | clean room re-creation | Linux / Windows |
| Gradient Mapping | Adjustments > Gradient Mapping | Recolors an image by looking up each pixel's luminosity, color channel, hue, saturation or alpha in a multi-color gradient. | Gradient Mapping by pyrochild (Zach Walker) (original) | port of the MIT source (LICENSE-original.txt in the zip) | Linux / Windows |
| Grid / Checkerboard | Effects > Render > Grid / Checkerboard | Draws a grid of lines, a checkerboard or a grid of dots with any cell size, line width and two colors with alpha. | Grid Maker by BoltBait and Illnab1024, and Grid & Checker Maker by MadJik (original) | clean room re-creation | Linux / Windows |
| Grim Color Reaper | Effects > Color > Grim Color Reaper | Removes a background color and recovers what was blended with it, so soft edges, glows and shadows become partly transparent without a halo. | Grim Color Reaper by Jotaf, continued as Kill Color Keeper by Pratyush (original) | clean room re-creation | Linux / Windows |
| Perspective | Effects > Distort > Perspective | Keystone and perspective transforms set by three ratios, vertical or horizontal, as a true perspective or a plain trapezoid. | Perspective by dpy (original) | clean room re-creation | Linux / Windows |
| Shape3D | Effects > Render > Shape3D | Wraps the image around a 3D sphere, cylinder or box and renders it with a perspective camera, lighting and a highlight. | Shape3D by MKT, with later fixes by MJW and toe_head2001 (original) | clean room re-creation | Linux / Windows |
| Water Reflection | Effects > Distort > Water Reflection | Turns the lower part of the selection into a rippled mirror image of what is above a waterline, like a lake reflecting a skyline. | Water Reflection by MadJik, after a reflection script by Tom Jackson (original) | clean room re-creation | Linux / Windows |
All ten in one zip per system:
paintc-plugins-all-1.0.0-linux-x86_64.zip,
paintc-plugins-all-1.0.0-windows-x64.zip.
Every zip holds one top folder per plugin with the library, its README.md
(controls, credits), a screenshot and, for ported code, the original
license as LICENSE-original.txt.
Installing
Unzip into the plugins folder of your system (create it if it is missing),
so that each plugin ends up as .../plugins/<name>/<name>.so (.dll), then
restart paint.c. The effects appear in the menus listed above; their
tooltip names the plugin, its author and version.
| System | Download | Plugins folder |
|---|---|---|
| Linux x86_64 (glibc 2.31 or newer, the same systems as the AppImage) | *-linux-x86_64.zip |
~/.local/share/paintc/plugins/ ($XDG_DATA_HOME/paintc/plugins/ when that is set) |
| Windows 10 and 11 x64 | *-windows-x64.zip |
%APPDATA%\paintc\plugins\, or a plugins folder next to paintc.exe of the portable zip |
| macOS | not in this release | build them from source: docs/PLUGINS.md |
# Linux, all plugins
mkdir -p ~/.local/share/paintc/plugins
unzip paintc-plugins-all-1.0.0-linux-x86_64.zip -d ~/.local/share/paintc/plugins# Windows (PowerShell), all plugins
Expand-Archive paintc-plugins-all-1.0.0-windows-x64.zip "$env:APPDATA\paintc\plugins"Effects > Plugin Errors... lists any library paint.c could not load;
paintc --disable-plugins starts without plugins; delete a plugin's folder
to remove it. Plugins run inside paint.c with the program's rights: install
plugins only from sources you trust. More: docs/PLUGINS.md in the source.
How they were built and checked
- Built from commit cfb505e with
packaging/plugins/build-plugins.sh: Linux in the Ubuntu 20.04 container
of the AppImage (GCC 13), Windows cross built with mingw-w64 (UCRT).
Every library exportsfx_entry; the Linux ones need no glibc symbol
newer than 2.31 and only glibc libraries, the Windows ones import only
KERNEL32 and the C runtime. The zips are reproducible. - Load tested with the paint.c 0.1.1 release builds: the Linux zips (each
zip, then the all-plugins zip) with the AppImage on X11, the Windows zips
with the installedpaintc.exeunder Wine: all ten plugins loaded with
no Plugin Errors entry, and every effect opened its dialog and applied
(one History item each).
Checksums (SHA-256)
506f1f9ff3595953731ed58882d43d957b897c9c42530dc708d71965dd9d7ef8 paintc-plugin-aa_assistant-1.0.0-linux-x86_64.zip
4be5204d791c9328346ba149258bd5a24d42730ea721a0b3401144162703824c paintc-plugin-aa_assistant-1.0.0-windows-x64.zip
8684279534d041c320beab2f16f...
paint.c 0.1.0
paint.c 0.1.0
paint.c is a native raster image editor written in C17 that reproduces the
workflow of Paint.NET 5.1 on Linux (Wayland and X11), Windows and macOS:
the same tools, menus, adjustments, effects, layer blend modes and keyboard
shortcuts, in a single small executable with no runtime to install.
paint.c is an independent clean-room project. It is not affiliated with
or endorsed by dotPDN LLC; Paint.NET is their trademark. Behavior was
reproduced from Paint.NET's documentation and from observing the running
program. The only Paint.NET source it builds on is the MIT-licensed
Paint.NET 3.36 release: the layer blend math and several adjustment,
effect and file-saving algorithms are re-implemented from it in C and
attributed in NOTICE. No later Paint.NET code and no Paint.NET assets,
icons or texts are used.
This is the first release. Parity with Paint.NET 5.1.12 is tracked row by
row in docs/inventory/PARITY.md (1469 rows: 1449 done, 20 not
applicable, none partial or open); see Known gaps below.
Downloads
| File | For |
|---|---|
paintc-0.1.0-linux-x86_64.AppImage |
Linux x86_64 with glibc 2.31 or newer (Ubuntu 20.04, Debian 11, Fedora 32 and later), Wayland or X11 |
paintc-0.1.0-windows-x64-setup.exe |
Windows 10 22H2 or Windows 11, x64: installer with Start menu entry and file associations |
paintc-0.1.0-windows-x64-portable.zip |
the same program without installation |
paintc-0.1.0-source.tar.gz |
source code; macOS users build from it (docs/BUILDING.md, section macOS) |
SHA256SUMS.txt |
SHA-256 of every file above |
- Linux:
chmod +x paintc-0.1.0-linux-x86_64.AppImageand run it.
Without FUSE, run it with--appimage-extract-and-run. The AppImage
holds one self-contained executable; SDL3 loads the X11 or Wayland
libraries (and libdecor for window decorations on GNOME) of the system
at run time. - Windows: the installer is per machine (Program Files) and registers
"Open with" entries for every supported image type; .pdn opens with
paint.c only when no other program claims it. The installer and the
executable are not code signed, so SmartScreen warns on first start
(More info, Run anyway). The portable zip keeps settings in%APPDATA%
unless started with--config-dir DIR. - macOS: no prebuilt package in this release (see Platforms). Build
from the source archive: Homebrewcmake ninja nasm, one CMake
configure and build, thenpackaging/macos/make-dmg.shor a plain
install, both signed ad hoc (docs/BUILDING.md has the exact steps).
Features
- Tools (19): Rectangle Select, Ellipse Select, Lasso Select, Magic
Wand, Move Selected Pixels, Move Selection, Zoom, Pan, Paint Bucket,
Gradient (7 types), Paintbrush, Eraser, Pencil, Color Picker, Clone
Stamp, Recolor, Text (system fonts, IME input), Line/Curve and Shapes
(29 shapes), with the toolbar options of Paint.NET (antialiasing, blend
mode, selection modes, tolerance, fill patterns, pen pressure). - Layers: the 14 classic blend modes with Paint.NET 3.36 integer math,
opacity, visibility, properties, duplicate, merge down, import from
file, flip and Rotate/Zoom. - Adjustments (13): Auto-Level, Black and White, Brightness /
Contrast, Curves, Exposure, Highlights / Shadows, Hue / Saturation,
Invert Alpha, Invert Colors, Levels, Posterize, Sepia, Temperature /
Tint. - Effects (42), all with live preview:
Artistic (Ink Sketch, Oil Painting, Pencil Sketch);
Blurs (Bokeh, Fragment, Gaussian, Median, Motion, Radial, Sketch,
Square, Surface, Zoom);
Color (Quantize);
Distort (Bulge, Crystalize, Dents, Frosted Glass, Morphology, Pixelate,
Polar Inversion, Tile Reflection, Twist);
Noise (Add Noise, Reduce Noise);
Object (Drop Shadow, Feather Object, Outline Object);
Photo (Glow, Red Eye Removal, Sharpen, Soften Portrait, Straighten,
Vignette);
Render (Clouds, Julia Fractal, Mandelbrot Fractal, Turbulence);
Stylize (Edge Detect, Emboss, Outline, Relief). - Image and edit commands: resize, canvas size, rotate, flip, crop to
selection, flatten, cut / copy / copy merged / paste (into a new layer
or image), fill and erase selection, select all, invert selection. - History: unlimited undo and redo within a memory budget (25 percent
of RAM by default), History window. - Files:
.pdnread and write: the reader opens files from Paint.NET 3.0
to 5.1.12 (checked against the independent pypdn reader on 489 real
files); the writer reproduces Paint.NET's layered file structure.- AVIF and JPEG XL read and write, with Paint.NET's save options
(quality, lossless, chroma subsampling, encoder preset or effort),
Exif and XMP metadata, HDR (PQ, HLG) images tone mapped to 8 bits. - PNG, JPEG, BMP, GIF, TIFF, WebP, TGA, DDS (BC1 to BC7) and OpenRaster
(.ora) read and write; Save Configuration dialog with a live preview
and the file size (with a computing percentage). - ICC profiles are converted on import and kept on export.
- Autosave and crash recovery, recent files, drag and drop, single
instance (files opened later go to the running window).
- Plugins: effect plugins load from the per-user plugins folder and,
for portable installs, from apluginsfolder next to the executable
(--disable-pluginsturns them off). - Interface: Paint.NET's menus, floating Tools, History, Layers and
Colors windows, image tabs, rulers, pixel grid, light and dark themes,
UI scaling for high DPI displays, Paint.NET's keyboard shortcuts.
Platforms and how they were verified
GitHub Actions was unavailable for the final builds (billing), so every
package of this release was built and checked locally.
- Linux (built in an Ubuntu 20.04 container, glibc 2.31, GCC 13;
packaging/linux/build-appimage-docker.sh): all 183 tests passed
inside the container;objdumpshows no symbol newer than GLIBC_2.29
(the floor is 2.31) and the executable needs only glibc (libstdc++ and
libgcc are linked statically, SDL3 and the codecs are built in). The
AppImage passed--self-test --headlessinside that container and on
Debian 13, then a scripted editing session (painting,
layers, Clouds, Shapes, Text, Invert Colors, the Effects menu and the
Twist dialog, saving and reopening .pdn, AVIF, JPEG XL and PNG) with
screenshots on X11 (Xvfb) and Wayland (headless Weston, window
decorations through the system libdecor), and a normal start with a .pdn
on both. - Windows (cross built with mingw-w64 GCC 14 against the Universal
CRT;packaging/windows/build-mingw-release.sh): all 183 tests passed
under Wine 10; the installer was run silently (/S) in a clean Wine
prefix and its files, Start menu entry and registry entries checked; the
installedpaintc.exeand the one from the portable zip passed
--self-test --headless; the installed one ran the same scripted
session with screenshots on Xvfb and opened a .pdn in a normal window;
the uninstaller (/S) removed the files, the shortcut and the registry
entries. Earlier CI runs built and tested paint.c natively with MSVC
(/W4 /WX), clang-cl and MinGW + Wine (all jobs green on commit
'ADR-017'; MinGW + Wine and clang-cl green again on the integration
branch in runs 37324304799 and 37331223253). This release has not been
run on a physical Windows machine. - macOS: verified by the all-green CI run on commit 'ADR-017' (macOS 14
arm64 and macOS 15 Intel, deployment target 13.0) and by run 37331223253
(configure, build and tests up to test_shell_crash). Changes made after
that run, including the bundled AVIF and JPEG XL build on macOS and the
test_shell_crash fix, have not been verified on a Mac (ADR-021).
Reports of macOS build results are welcome.
Known gaps
- Not applicable (N/A in PARITY.md):
- maximum image size is 65535 pixels per side (Paint.NET: 262144;
ADR-014), also in Resize and Canvas Size; - HEIC and JPEG XR are not supported: Paint.NET reaches them only
through Windows system codecs (ADR-019); - opening http(s) URLs from the Open dialog (ADR-020);
- File > Print and File > Acquire (scanners and cameras) are out of
scope: Print is shown disabled, Acquire is hidden; - no update checker (the Updates settings page is not applicable),
no Windows Advanced Color (HDR display) setting, Help > Donate hidden; - Red Eye Removal has Paint.NET 5.1's single Strength control, not the
3.36 Tolerance slider.
- maximum image size is 65535 pixels per side (Paint.NET: 262144;
- Text: no complex script shaping (ADR-004): right-to-left text and
scripts that need shaping (Arabic, Indic scripts) are drawn character
by character. - AVIF: libavif decodes at most 16384 x 16384 pixels in total; saving
from the app runs the encoder on one thread (Slow and Very Slow presets
are slow on large images); HDR tone mapping is paint.c's own. - Reference data: parity was checked against the Paint.NET 5.1
documentation and Paint.NET 5.2 beta running under Wine, not against
5.1.12 on Windows (ADR-009, ADR-016). - Signing: Windows binaries are unsigned; macOS builds are signed ad
hoc only (Gatekeeper asks on first start of a copied app).
Checksums (SHA-256)
f9c5030f38699655e7223474e60257c45b92eaabaf776310bd173aa5b0bb471c paintc-0.1.0-linux-x86_64.AppImage
95ef9d924461fbbaffd7cd34ad53d28d171e9aef2ea5d3b3655df09e93afce50 paintc-0.1.0-windows-x64-setup.exe
e5b73ae5c1786363a17c6cc3d6ba40b63eb91c34ec3b5c575d469e31bd843c10 paintc-0.1.0-windows-x64-portable.zip
fd70af202e67a9aef3a86cf017d5313e92de7a0b334fc4de821452db6b277cba paintc-0.1.0-source.tar.gz
SHA256SUMS.txt in the release has the same lines; check with
sha256sum -c SHA256SUMS.txt (Linux) or shasum -a 256 -c SHA256SUMS.txt
(macOS).
License and attribution
paint.c is MIT licensed (LICENSE). NOTICE carries the MIT attribution
of the algorithms re-implemented from Paint.NET 3.36. Every package has a licenses folde...