Skip to main content

Pixpop

pixpop logo

A TUI paint application built with the Textual framework.

Pixpop was originally built to export pixel art as ANSI escape sequences, but evolved into a simple multi-layer, multi-canvas pixel drawing app.

I mainly use it now to create fun images to spice up my terminal MOTD via jestsay.

Documentation

Features

  • Multiple canvases
  • Fixed-size canvases with scrollbars (independent of terminal size)
  • Multiple layers
  • Full mouse and keyboard support (drawing is mouse-only)
  • Configuration file for application defaults
  • Save and export as .ans, .png, and .pix session files
  • Open and load .ans, .png, and .pix session files
  • Undo-redo stack
  • Help screen and tooltips

Usage

pixpop
  • Draw with the mouse (see Caveats for single-pixel drawing)
  • Press ? for the help screen and full keybindings
  • Ctrl+S to save, Ctrl+E to export, Ctrl+O to load (.ans, .png, .pix)
  • Try to cat your .ans file in the terminal

See the documentation for details.

Screenshots

Pixpop main window Pixpop help dialog

Installation

Terminal requirements

Pixpop needs two environment variables for full color support:

  • TERM must be a 256-color variant (e.g. xterm-256color)
  • COLORTERM=truecolor to enable 24-bit true color

Most modern terminals (kitty, alacritty, foot, ghostty, wezterm, GNOME Terminal, Konsole) set these correctly out of the box. If colors look off, check with:

echo $TERM       # should end in -256color
echo $COLORTERM  # should be truecolor

With uv (recommended):

uv tool install pixpop

With pipx:

pipx install pixpop

From source:

git clone https://github.com/umbsublime/pixpop.git
cd pixpop
uv sync
uv run pixpop

Pixpop session format (.pix)

Pixpop supports saving and loading full sessions as .pix files. These are gzipped JSON files that capture:

  • Tabs (canvas names and order)
  • Canvas size per tab
  • Layers, visibility, and pixel data
  • Undo/redo stacks per tab
  • Shared tool state and palette selection

The .pix format is intended for restoring a working session rather than exporting artwork. For artwork exports, use PNG or ASCII.

Caveats

This application is designed to draw in the terminal, which comes with limitations. We are able to draw pixels (half-characters), but there is no way to know if the mouse is positioned on the top or bottom pixel. To work around this, set the pen to brush size 1 (a single pixel) and hold Alt to offset the cursor down by one pixel — painting the bottom half of the cell under the pointer. The Alt offset also applies to the cell, eraser, shape, and light/dark tools.

Powered by

Metadata

Release files for pixpop 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pixpop 0.2.0
File Size Uploaded
pixpop-0.2.0.tar.gz 317.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pixpop 0.2.0
File Interpreter ABI Platform
pixpop-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 415.8 kB

Release files / pixpop-0.2.0.tar.gz

Download URL pixpop-0.2.0.tar.gz
Size 317.9 kB
Tags Source
SHA-256 checksum
How to use checksums
5f2cf2ecc7fbc1f3028f5be83dfcfce08dc038c566cf7b82a5308b1feb2bf17a
BLAKE2b-256 checksum
How to use checksums
918c94d04cc913797190b4cd5fbbf02ac36d99322f8b5395fadb526752849b1d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release files / pixpop-0.2.0-py3-none-any.whl

Download URL pixpop-0.2.0-py3-none-any.whl
Size 97.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fd104eb94a355ba6efa029f13ef7e4a5cd31aa687f4b81c38412ea3bc63b36f5
BLAKE2b-256 checksum
How to use checksums
347bfc95a35f170945156d964d3da6832aa47e3ff67ef603d363b097eceef59d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page