Durdraw keeps its art in .dur files and never leaves the terminal
Versatile ASCII and ANSI Art text editor for drawing in the Linux/Unix/macOS terminal, with animation, 256 and 16 colors, Unicode and CP437, and customizable themes
At a glance
- What is it?
- Durdraw is a BSD-3-Clause Python editor for ASCII, Unicode and ANSI art in the terminal, with frame animation, 256 and 16 colour modes, CP437 conversion and three installed entry points. It needs Python 3.10 and no third-party Python dependencies.
- Who is it for?
- Durdraw suits an artist or sysadmin who wants to make ANSI art without leaving a Unix terminal, and who already thinks in 16 colour CP437, because that is where its drawing model and its export path are most reliable. It is the wrong choice if you need PNG or GIF export of Unicode work, since the README restricts those exports to 16 colour mode with CP437 compatible characters, or if you want a graphical canvas.
- Can I use it commercially?
- Yes. BSD-3-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A DOS art editor rebuilt for ncurses
Durdraw is an ASCII, Unicode and ANSI art editor for Unix-like systems, and its lineage is stated plainly in the README: it is heavily inspired by classic ANSI editing software for MS-DOS and Windows, naming TheDraw, Aciddraw and Pablodraw, with a modern Unix twist.
That heritage explains the interface. You draw on a character grid rather than a pixel canvas, so a document is a matrix of cells each holding a glyph and an attribute, and colour is limited to what a terminal can render. The feature list is exactly what that model allows: frame-based animation, custom themes, 256 and 16 colour modes, terminal mouse input, DOS ANSI art viewing, CP437 and Unicode mixing and conversion, HTML output, and mIRC colour output.
The runtime requirements are light. Python 3.10 or later, and any Unix-like system, and pyproject.toml shows a dependencies list that is empty. The project classifies itself under Console Curses, targets POSIX and Linux, and declares Python 3.10 through 3.15, with a caveat in the README that versions 3.13.1 to 3.13.8 are not recommended.
Two optional external programs extend it. ansilove enables PNG and animated GIF export, and the README restricts that export to 16 colour mode with CP437 compatible characters. fastfetch or neofetch enables durfetch, the system-information display built on the same renderer.
Five install routes, and they ship different files
Installation is over-documented in a useful way, because the methods are genuinely different.
From the source repository, clone and install with pip:
git clone https://github.com/durdraw/durdraw.git
cd durdraw
python3 -m pip install --upgrade .With uv you can run the latest release straight from PyPI without installing it:
uv tool run -U durdrawPlain pip installs from git, and the README shows the three targets, the master branch, a specific tag such as 0.28.0, and the dev branch:
python3 -m pip install 'git+https://github.com/durdraw/[email protected]'That pip route has a documented gap: it does not include everything, specifically the example .dur files under examples/ and the entrypoint scripts described further down. If you want the bundled art, clone instead.
Nix users with flakes enabled get nix run github:durdraw/durdraw for a one-off run, a flake input for systemPackages or home.packages, and nix develop for a development shell. The Nix package is the one that bundles all dependencies including neofetch and ansilove, so it is the fullest install.
There is also a Dockerfile based on python:3.12-alpine that installs the package and sets TERM=xterm-256color, and a way to run from a checkout with ./start-durdraw.
Three commands come out of one package
pyproject.toml defines three console scripts, and knowing what each does tells you most of the feature set.
The main entry point is durdraw, the editor and player. Alongside it are durfetch, a neofetch-style system information tool, and durview, a viewer. All three come from the durdraw package with no runtime dependencies.
Playing and viewing are the same code path with different defaults, which is why the file extensions overlap. The -p or --play option plays .dur, .ANS or .ASC files and then exits, it accepts several files at once, and it is how you watch a downloaded ANSI artpack with the usual .DIZ, .ASC and .ANS naming:
durdraw -p file1.dur file2.dur file3.dur ...-d or --delayexit waits a number of seconds after playback before exiting, and requires -p. -x or --times plays a file a set number of times, also requiring -p. That requirement is a small sign of a careful argument parser rather than a convenience shortcut.
Rendering options cover the two cases where a terminal disagrees with the file. --256color and --16color select the colour mode, -b or --blackbg uses a black background instead of the terminal default, -W and -H set width and height, --wrap sets a wrap behaviour, --nomouse disables mouse input, --cursor selects a cursor style, and --theme names a theme while --notheme disables them.
There is a man page for each command, durdraw.1, durfetch.1 and durview.1, plus durdraw.desktop for a desktop entry and durdraw.ini plus example-charset.ini for configuration and charset definitions.
CP437 versus Unicode is a real conflict, not a preference
Durdraw mixes CP437 and Unicode and converts between them, and the README is honest about where that works. PNG and GIF export only works in 16 colour mode for now, and only with CP437 compatible characters.
That single sentence defines the boundary of the whole tool. CP437 is the DOS character set where block and shade glyphs are what make art work, and it is what ANSI art packs from the 90s are drawn in. Unicode has a far larger repertoire but different glyph shapes for the same visual intent, and a terminal font decides how block characters actually render.
So the practical split is: drawing and playing classic ANSI art is well served, exporting that art to an image format is served in one narrow configuration, and drawing Unicode-heavy work is served for terminal display but not for image export.
The theme system and charset definitions address the display side. Themes live in the durdraw package under themes/, charsets under charsets/, and the package data list also includes help/, plugins/, neofetch/ and durf/, so plugins and additional character set data are supported. There is also durformat.md and plugin-format.md at the repository root, documenting the file and plugin formats.
The .dur format is the project's own, which is why the README needs a section for it. The repository carries file_id.dur, file_id.ans, file_id.diz and file_id.utf8.ans at the root, which look like a worked example of one piece saved in each format.
Animation lives in the document, not in a separate timeline
Frame-based animation is a first-class feature rather than an export mode, which is what separates Durdraw from an image editor that can emit GIFs. The examples directory shows the shape of the corpus: cm-doge.asc and cm-doge.dur as the same piece in two formats, cm-eye.dur, dogeblink.dur, dopehax.dur, indyz-dopehax-256.dur, indyz-kali.utf8.ans, indyz-linuxfire.dur, indyz-space-shaman.dur, indyz-xmas.dur, linux-fetch.dur, linux-fetch-colorful.dur, linux-motd.dur, mane.dur and rain.dur.
Note the encoding variety in those names alone: one .utf8.ans file next to several .dur files and a plain .asc. Files named with 256 or colorful are the colour-mode examples.
The playback controls are the ones a viewer needs, and they are on the command line rather than in a menu. -x loops a set number of times, -d holds the terminal open after the last frame so a short animation does not vanish, and passing several files plays them in sequence.
durfetch is the clearest demonstration of the model: it renders system information through the same engine as a drawing, which is why it needs neofetch or fastfetch in the path and why linux-fetch.dur and linux-fetch-colorful.dur are in the examples.
Where Durdraw stops, and what to use instead
The boundaries are visible from the requirements and the optional dependencies.
There is no graphical canvas and no mouse-driven freehand drawing, because the document model is characters. Terminal mouse input exists for UI interaction, not for painting. If you need brush strokes, layers or filters, this is the wrong category of tool.
There is no Windows support stated, despite the DOS art lineage, and the classifiers list only POSIX and Linux. The pre-made art ecosystem it reads is fine, since.ANS and.ASC play, but the editing environment is Unix only.
Export is the sharpest limit. ansilove is required for PNG and GIF, and only for 16 colour CP437 output. Producing shareable images from Unicode art is a workflow you will build elsewhere.
Optional dependency handling is also minimal: gif-export is declared in pyproject.toml as an extra requiring Pillow 9.0.0 or newer, which is a lighter story than the ansilove path but a second, different mechanism for the same job.
Durdraw modernises the model and the terminal support, and inherits the grid. The last push was on 2026-10-16 with 0.30.1 released on 2026-09-11 after 0.30.0 on 2026-09-08, so the project is actively changing, and BSD-3-Clause keeps reuse simple.
Editorial conclusion
Durdraw suits an artist or sysadmin who wants to make ANSI art without leaving a Unix terminal, and who already thinks in 16 colour CP437, because that is where its drawing model and its export path are most reliable. It is the wrong choice if you need PNG or GIF export of Unicode work, since the README restricts those exports to 16 colour mode with CP437 compatible characters, or if you want a graphical canvas. Verify first that your terminal honours TERM=xterm-256color, run durdraw -p on a bundled example such as examples/indyz-xmas.dur, and decide which install route you want, since the pip package omits the example .dur files and the entrypoint scripts.
Frequently asked questions
How do I install Durdraw?
From a clone with python3 -m pip install --upgrade ., straight from PyPI with uv tool run -U durdraw, from git with python3 -m pip install 'git+https://github.com/durdraw/durdraw', or with Nix flakes via nix run github:durdraw/durdraw. The pip package omits the bundled example files and entrypoint scripts.
What does Durdraw need to export PNG and GIF?
The external ansilove program must be installed and on your path. The README states that PNG and GIF export only works in 16 colour mode and only with CP437 compatible characters.
Which Python versions does Durdraw support?
Python 3.10 or later, classified for 3.10 through 3.15. The README adds that versions 3.13.1 to 3.13.8 are not recommended.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/durdraw-durdraw)Was this useful?