CLI tool
Achno/gowall avatar
Achno/gowall

gowall's dependency list is the feature list

A tool to convert a Wallpaper's color scheme / palette, OCR with VLM's Traditional & Hybrid, Image Compression ,color palette extraction, image upsacling with Adversarial Networks and more image processing features.

2,314 stars37 forksGoMIT

At a glance

What is it?
gowall started as a wallpaper recolouring tool and became a general image processing CLI, and the clearest description of what it actually does is its go.mod: MuPDF bindings for PDF input, ONNX runtime for local upscaling, a palette generator, Go colour maths, WebP and AVIF codecs, and two model provider SDKs for the OCR path. It reads from stdin, writes to stdout, and ships themes rather than asking you to name a colour.
Who is it for?
Adopt gowall if you want one binary for wallpaper and icon recolouring, palette extraction, compression, format conversion and image effects, and if you like piping it into a shell script rather than configuring a batch tool. Do not adopt it expecting a single install path, because the Homebrew formula is on v0.2.0 while the latest release is v0.2.4, and the README tells you to compare gowall -v against the release page.
Can I use it commercially?
Yes. MIT 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 last received commits 114 days ago.
What is it written in?
Mainly Go, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.

Editorial analysis

It began with wallpapers and kept going

The project's own summary is that gowall started as a tool to convert an image, specifically a wallpaper, to any colour scheme or palette you like, and has since evolved into what it calls a swiss army knife of image processing offering OCR, image upscaling, image compression and more. The original feature is still the clearest one: recolour an image to match a theme, with the built-in set covering Catppuccin, Dracula, Everforest, Gruvbox, Nord, Onedark, Solarized and the Tokyo variants, and a further twenty themes behind a collapsed list in the README that includes Rose Pine, Kanagawa, Night Owl, Cyberpunk, Synthwave 84 and Material. It also recolours icons in svg and ico form, which is the detail that reveals the design: a theme is a palette, and both images and icons are inputs to the same recolouring. For a user the pitch is that you do not have to name a colour, and for a maintainer the pitch is that a new theme is data rather than code.

Themes are configuration, and gowall list shows all of them

The theme mechanism is worth understanding because it is how the project grows without a release. A theme can be written by a user into a configuration file at ~/.config/gowall/config.yml, and the command gowall list shows every theme available, both the default ones and the user-created ones, which means the catalogue and your own additions appear through the same command. The README points at a section of the documentation for creating a custom theme and asks for an issue or a pull request if a favourite is missing, so the path for extending it is documented rather than reverse engineered. A YAML file is also why the project depends on a YAML library, and the dotenv dependency suggests the same configuration channel is used for credentials, which is the bridge to the OCR features further down. If you keep a wallpapers directory and want every image to match your editor theme, the interesting number here is not the theme count, it is that recolouring an icon and recolouring a wallpaper are the same operation.

Pipes in, pipes out, and a spinner for the slow paths

Two features decide how the tool feels in practice. The first is Unix pipe and redirection support: read from standard input and write to standard output, which means gowall composes with the rest of your shell rather than insisting on being the last step. The second is the image preview, which the README calls out with an exclamation mark because it is unusual for a command line tool: it prints the image directly in the terminal, so you can look at a result without leaving the shell or opening a viewer. Together they change the workflow from run a command and open a file to look, adjust, rerun. The slower operations get their own affordances, which the dependency list makes visible, with a spinner library for progress and a pipeline library that reads like a fan-out of processing stages. Neither detail is exotic, and both are the difference between a scriptable tool and a desktop utility with a command line veneer. The docs page for terminal image preview is linked separately, which suggests the author considers it a selling point rather than a toy.

The go.mod explains the feature list line by line

The dependency list is more informative than the README, so it is worth reading as a map. Two providers, the OpenAI Go SDK at a beta version and Google's generative AI SDK, are what make the vision-language OCR path work. A MuPDF binding, go-fitz, is why OCR accepts PDFs as well as images. ONNX runtime bindings are how AI upscaling runs a model locally rather than calling a service. A palette generator with a k-means implementation behind it is where colour palette extraction comes from, and the feature list helpfully notes it works like pywal. A colour maths library is the recolouring engine, and separate WebP and AVIF packages are why format conversion covers the formats it does. Go's own imaging package covers the effects: mirror, flip, grayscale, brightness, drawing borders and grids, inverting, removing a background, and turning an image into pixel art. Everything else is infrastructure: a CLI framework, a YAML parser, a dotenv reader, a spinner, a pipeline library and a rate limiter.

OCR is three strategies, and the third is the expensive one

The OCR feature is listed as extracting text from images and PDFs, supporting more than nine providers across traditional OCR, visual language models and hybrid methods. The three-way split is the useful part. A traditional engine reads pixels, a vision language model reads a rendered page as a picture and reasons about it, and a hybrid method combines them, usually by letting the model handle the awkward layouts and the traditional engine handle the clean text. For a CLI, the difference is where the work happens and what it costs. The traditional path runs on your machine and needs a key for nothing. The VLM path sends your image to a provider and needs credentials, which is what the dotenv dependency and the two model SDKs are for. Choosing a strategy is therefore also a decision about where your documents go, and the README's framing of providers as a set to choose between, rather than a single default, is the right shape for that. The gap to note is that the README does not list the nine providers, so the practical list is in the documentation site rather than in the repository.

Install paths disagree about the version

The installation section is unusually honest about the mess, and the first instruction is a verification step rather than a command: run gowall -v and compare it against the release page, because the documentation site only shows the commands and flags of the latest released version. The preferred route is the release binary, a .tar.gz for your operating system and architecture, from which you extract the binary named gowall and put it in your path:

bash
sudo cp gowall /usr/local/bin/

The package managers are the fallback, and the README explains when to use them, including when the packaged version is behind. The Homebrew formula is the cautionary case, and it is labelled as such, currently on v0.2.0 while the latest release is v0.2.4. Arch has yay -S gowall, Fedora has a COPR repository, Void has xbps-install, and NixOS has a package maintained by Emily Trau, added through environment.systemPackages with pkgs.gowall. Building from source is the route for contributors and for unreleased features:

bash
git clone https://github.com/Achno/gowall
cd gowall
go build
sudo cp gowall /usr/local/bin/
gowall

The project requires Go 1.25.0, and on Windows the README says you also need zig alongside Go, with scoop offered as the package manager. That extra toolchain requirement on one platform is the kind of thing that turns a two-minute build into an afternoon.

Compress, convert, animate, and the rest of the grab bag

The remaining features are small and mostly one command each, and they are the reason the tool is worth keeping installed. Compression covers png, jpeg, jpg and webp. Format conversion goes the other way, so a webp becomes a png. Creating a gif from a set of images lets you specify the frames, a delay and the number of loops, which is a small feature that saves a separate tool. Extracting the dominant colours is the palette path, the one the README compares to pywal, and it is the natural companion to the theme recolouring since both work in the same colour space. Pixel art conversion, colour replacement for one specific colour, inverting, drawing borders and grids on the image, and removing a background round out the list. Then there is daily wallpapers, a feature where community-voted wallpapers reset daily, which is the one part of the project with a server behind it and therefore the one part that is not a local tool. The repository layout is a conventional Go project with cmd, internal, config, terminal and utils directories around a main.go, which is what you would expect from a CLI rather than a service.

Against pywal, and against calling ImageMagick yourself

The obvious comparison for the palette half is pywal, and the README names it, which is generous and accurate: pywal generates a palette and writes theme files for your shell and editor, and it does that part extremely well. It does not recolour your wallpaper, and it does not compress an image. The other comparison is a general image toolkit such as ImageMagick, which can do every individual operation the effects list contains, and which most systems already have. The difference is that gowall is organised around a theme rather than around a conversion, so the recolour is one command with a name instead of a colour replacement expression you write yourself, and the same theme vocabulary applies to your wallpaper and your icon set. For scripted work the difference narrows, since you can script ImageMagick too, and the honest summary is that gowall wins on the ergonomics of a specific job and loses on the breadth of a general tool. The additional consideration is the dependency floor, since a single static-ish Go binary with ONNX runtime and MuPDF inside it is not the same artefact as a small colour script.

Editorial conclusion

Adopt gowall if you want one binary for wallpaper and icon recolouring, palette extraction, compression, format conversion and image effects, and if you like piping it into a shell script rather than configuring a batch tool. Do not adopt it expecting a single install path, because the Homebrew formula is on v0.2.0 while the latest release is v0.2.4, and the README tells you to compare gowall -v against the release page. Verify four things before you rely on it: which binary you actually installed and whether it matches the release page, that the OCR provider you intend to use has credentials available, since the VLM path goes through the OpenAI and Gemini SDKs, that your theme exists or that you are willing to write one into ~/.config/gowall/config.yml, and that the documentation page you are reading matches your version, since the docs only cover the latest released version. The licence is MIT, the last release was v0.2.4 on 2026-04-09, and the last push was 2026-06-10.

Frequently asked questions

How do I install gowall?

The preferred method is to download the .tar.gz for your platform from the releases section, extract the gowall binary and copy it into your path with sudo cp gowall /usr/local/bin/. Homebrew, the Arch AUR, a Fedora COPR, Void and NixOS packages also exist, and the README notes the Homebrew formula is behind the latest release.

What can gowall do besides recolouring a wallpaper?

It also extracts colour palettes like pywal, compresses png, jpeg, jpg and webp images, converts formats, creates a gif from images, converts an image to pixel art, replaces a specific colour, inverts colours, draws borders and grids, removes a background, applies effects such as mirror, flip, grayscale and brightness, and recolours svg and ico icons.

Which OCR providers does gowall support?

The README says more than nine, across traditional OCR, visual language models and hybrid methods, and does not list them. The go.mod shows two model provider SDKs, the OpenAI Go SDK and Google's generative AI SDK, so the vision-language path needs provider credentials.

How do I add a custom gowall theme?

Write it into the configuration file at ~/.config/gowall/config.yml. The command gowall list shows all available themes, both the built-in ones and the user-created ones, and the README points at a documentation section on creating a custom theme.

Does gowall work in a shell pipeline?

Yes. The feature list includes support for Unix pipes and redirection, reading from standard input and writing to standard output, and there is an image preview feature that prints images directly in the terminal.

What do I need to build gowall from source?

Go 1.25.0, and on Windows the README says you also need zig installed and available in your path, with scoop suggested as a package manager. On other systems git clone, go build and copying the binary into your path is enough.

Official sources

  1. Achno/gowall on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
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.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/achno-gowall.svg)](https://hysenlabs.com/projects/achno-gowall)