Skip to content

Releases: vancevoj/paint.c

paint.c 0.1.3

Choose a tag to compare

@vancevoj vancevoj released this 06 Oct 04:31

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 SingleMainWindow key, 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 in cmake --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

Choose a tag to compare

@vancevoj vancevoj released this 06 Oct 04:13

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.paintc desktop 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.c names fit as a command of
    its own (zoom fit zoomed 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

Choose a tag to compare

@vancevoj vancevoj released this 06 Oct 01:01

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 the wp_fifo_v1 protocol, 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 as gfx.video_driver (wayland or
    x11) and takes effect at the next start. The SDL_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.h with 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, or paintc-plugins-all-1.0.0-<system>.zip,
    with SHA256SUMS).
  • 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

Choose a tag to compare

@vancevoj vancevoj released this 06 Oct 01:02

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 exports fx_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 installed paintc.exe under 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...
Read more

paint.c 0.1.0

Choose a tag to compare

@vancevoj vancevoj released this 05 Oct 19:15

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.AppImage and 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: Homebrew cmake ninja nasm, one CMake
    configure and build, then packaging/macos/make-dmg.sh or 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:
    • .pdn read 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 a plugins folder next to the executable
    (--disable-plugins turns 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; objdump shows 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 --headless inside 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
    installed paintc.exe and 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.
  • 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...

Read more