cd /news/generative-ai/artwork-tui-spreadsheet-driven-gener… · home topics generative-ai article
[ARTICLE · art-114452] src=github.com ↗ pub= topic=generative-ai verified=true sentiment=· neutral

Artwork-TUI – spreadsheet-driven generative art tool in the terminal

Andri-berger's artwork-tui is a terminal-native generative art tool that combines a spreadsheet-driven interface with a randomizer engine, allowing users to compose layouts and export high-resolution PNGs. The tool, which requires Python 3.11+ and uses Playwright to drive a headless Chromium browser for rendering, is available via curl install script, Homebrew, and AUR, and stores user files in platform-specific directories.

read7 min views2 publishedAug 28, 2026
Artwork-TUI – spreadsheet-driven generative art tool in the terminal
Image: Michielbdejong (auto-discovered)

Generative design tool with a terminal UI — compose layouts, render to canvas, export to Hi-Res Png (any resolution your machine can handle). artwork-tui is a terminal-native artwork and layout generator, operating entirely within the constraints of the TUI. It combines a spreadsheet-driven interface for manual layout composition with a randomizer engine for generative artwork, supporting custom fonts and image assets.

The tool emerged from a simple frustration: existing creative layout tools are either locked behind expensive subscriptions, tied to a specific OS, or bloated with features that obscure rather than enable the creative process. The terminal, by contrast, offers a direct and honest working surface – what you type is what happens, no hidden layers, no telemetry, no forced updates. artwork-tui occupies a genuinely vacant niche: somewhere between a generative art framework (too code-heavy, no interface) and a design tool (too GUI-dependent, too opinionated), it offers a middle ground that has no real equivalent in the current landscape. The spreadsheet metaphor is deliberate – familiar enough to require no learning curve, structured enough to impose a productive constraint on the creative process.

Installation / Configuration / API Reference / API Credit / Gallery

|

|

Like its sibling filterx-tui, this is a Python TUI installed in an isolated environment — no npm, no Electron shell. One honest caveat upfront: the rendering engine is a real browser. Playwright drives a headless Chromium to compose and rasterize the layouts, so the install includes a one-time browser download (~150 MB). That is the price for GPU-accelerated WebGL filters and pixel-perfect output; everything else stays lean.

Pulls the install script directly from the repo and wires everything up, including the Playwright browser download. Requires Python 3.11+. As always with curl-into-sh: the script is short and readable — take a look before you run it.

curl -fsSL https://raw.githubusercontent.com/\
andri-berger/artwork-tui/main/install.sh | sh

Tap the formula and let Homebrew resolve the Python side; the second command fetches the Chromium build Playwright renders with. Dependencies are bundled in that download, so no further setup is needed. Additional, user-generated files are stored in the following directory => ~/Library/Application Support/artwork-tui

brew tap andri-berger/artwork-tui \
https://github.com/andri-berger/artwork-tui
brew install artwork-tui #install from tap

Use your AUR helper of choice. The --with-deps

flag lets Playwright pull the system libraries Chromium needs — on a minimal Arch install this saves you a round of hunting missing shared objects. Firefox works as an alternative engine if you prefer it; webkit is not supported. Additional, user-generated files are stored in the following directories => ~/.local/share/artwork-tui and ~/.local/state/artwork-tui

yay -S artwork-tui #Or use paru instead
playwright install chromium --with-deps

The interface follows the same anatomy as filterx-tui: file trees on the left feed the pipeline, a tabbed spreadsheet in the center holds every parameter, and a button row drives generation and export. Buttons and function keys are twins here as well — F5 simply presses Afs programmatically — so the API Reference below and this table describe one surface from two angles.

The central idea is that an artwork is nothing but a spreadsheet. Six tabs partition the parameter space: one for global settings, one for the master layout, two for styling the element groups, and two for the image and typography settings that apply across all elements. Every cell is editable, every value ends up in the exported json — which means a finished piece can be reopened, inspected, and modified cell by cell. There is no hidden state.

Elements are addressed by group and index, A00 through F99 — six groups of up to a hundred elements each. The groups A–C can be seeded independently via their buttons, which is what makes generated layouts reproducible: same project file, same seeds, same artwork. As with the sibling project, image previews render inline, so a terminal with a graphics protocol is required — kitty, ghostty, or wezterm.

artwork-tui #Launches the TUI

Everything is keyboard-driven, and the function keys are deliberately thin: F4 through F9 do not implement anything themselves — they programmatically press their button twins from the Configuration table above. One action, one code path, two ways to reach it; whatever holds for a button holds for its key, and the two tables stay in sync by construction rather than by discipline.

The remaining bindings are spreadsheet vocabulary. F1/F2/F3 give you copy/cut/paste on cells — the grid is meant to be worked like a spreadsheet, including moving values between rows, tabs, and element groups. Navigation follows terminal conventions throughout: if you have used any TUI before, your hands already know this table.

Key Binding Description
Del
Delete Delete table cell.
F1
Copy Copy table cell. Think of it as Ctrl-C in a spreadsheet.
F2
Cut Cut table cell. Think of it as Ctrl-C in a spreadsheet.
F3
Paste Paste table cell. Think of it as Ctrl-V in a spreadsheet.
F4
Clear Triggers Button X programmatically (see Table above).
F5
Afs Triggers Button Afs programmatically (see Table above).
F6
Bfs Triggers Button Bfs programmatically (see Table above).
F7
Cfs Triggers Button Cfs programmatically (see Table above).
F8
Create Triggers Button Create programmatically (see Table above).
F9
Export Triggers Button Export programmatically (see Table above).
Tab
Navigate Cycle forward through all navigational UI elements — file trees, the six table tabs, and the button row — in a fixed, predictable order.
Arrow-keys
Navigation Navigate table/grid cells in all directions: left, right, up, down. Within the file trees, up/down move through entries.
BackSpace
Navigation Step back one level — leaves cell editing without applying the change, or collapses the current node in a file tree.
Space
Navigation Toggle the element under the cursor — expands or collapses a tree node without moving focus.
Enter
Navigation Confirm — commits the edited cell value, or opens the highlighted file into the project.
Ctrl-Q
System Exit the app. There is no exit prompt — F9 is the explicit save, so export first if the current grid state matters to you.

This tool stands on other people's work, and the table below is meant as more than a dependency list. Entries are grouped by layer: Build covers what produces the README assets, Utility the Python and JavaScript toolchain — including d3-random, whose seedable generators are what makes reproducible artwork possible in the first place. Framework is the TUI foundation, while Conversion and Processing form the rendering heart: Playwright drives the browser, html-to-image rasterizes the composed layout, and the PixiJS filter collection provides the WebGL effects layered on top. The layout engine itself is homegrown, but it would have nothing to run on without these.

The Inspiration entries are of a different kind than in filterx-tui: no code, not even patterns — purely visual debts. The linked Pinterest board is the moodboard this tool was built to chase, and print-artwork.com is the commercial ancestor both sibling projects were carved out of. If you want to understand what the random generator is aiming at aesthetically, those two links say more than any parameter documentation could.

Layer Name Link
Build
Apng

Buildhttps://github.com/emersion/grimUtilityhttps://github.com/biomejs/biomeUtilityhttps://github.com/astral-sh/ruffUtilityhttps://github.com/astral-sh/uv Utilitieshttps://github.com/numpy/numpy Utilitieshttps://github.com/d3/d3-randomFrameworkhttps://github.com/tox-dev/platformFrameworkhttps://github.com/Textualize/textualFrameworkhttps://github.com/lnqs/textual-imageConversionhttps://github.com/bubkoo/html-to-imageConversionhttps://github.com/microsoft/playwrightProcessinghttps://github.com/opencv/opencvProcessinghttps://github.com/pixijs/filtersInspirationhttps://de.pinterest.com/andriInspirationhttps://print-artwork.comThirty layouts straight from the random generator — where the filterx gallery shows one image transformed many ways, this one shows the opposite: many compositions from one machine. Each piece below was generated with Create, rendered through the Playwright/PixiJS pipeline, and exported untouched; the differences between them are nothing but different values in the six-tab spreadsheet.

None of these are dead ends, either. Every png in the grid has a json sibling carrying its complete parameter set — reopen it, change a seed or a single cell, and you get a variation instead of starting over. Filenames are the Unix timestamps of their render runs, left as-is: batch outputs, not a curated portfolio. Click any thumbnail for full resolution.

|

── more in #generative-ai 4 stories · sorted by recency
── more on @andri-berger 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/artwork-tui-spreadsh…] indexed:0 read:7min 2026-08-28 ·