Skip to content

Repository files navigation

Devoid — the wordmark, its O drawn as an accretion disk

Cut the background out of an animated image.
Answer the one question the pixels can't.

Download for macOS

latest release Apple silicon licence

Download  ·  What it asks you  ·  Using it  ·  If something goes wrong

Devoid removes the background from animated images on your Mac — GIF, WebP, AVIF, APNG, and static PNG and JPEG. Drop files on the window, get transparent ones back beside them. Nothing is uploaded.

While most engines guess or restrict, Devoid's engine asks. The engine underneath will not guess at a question about what the artist meant — so instead of handing you a hex code and a bounding box to interpret, Devoid marks the exact disputed pixels on the artwork and takes your answer as a click.


Download and Install

1 · Download the disk image.

Get the latest Devoid-<version>-arm64.dmg from the releases page.

2 · Open it and drag Devoid into Applications.

Double-clicking the .dmg opens a window with the app and a shortcut to your Applications folder. Drag one onto the other, then eject the disk image from the Finder sidebar.

3 · Open it the first time by right-clicking Devoid.app → Open.

Important

The app is not signed! — A normal double-click will not work the first time. MacOS will say the app is damaged or from an unidentified developer. It is neither — the app carries a self-signed certificate, not the official paid Apple one, and Gatekeeper only trusts Apple's.

How to Open an Unsigned App

By right-clicking:

  • Right-click Devoid → Open → Open.
  • You do this once; every launch after that is a normal double-click.

In System Settings:

  • Try to open the app and dismiss the warning message that says the app cannot be opened.
  • Open the Apple menu and select System Settings.
  • Click on Privacy & Security in the sidebar.
  • Scroll down to the Security section to find the blocked app.
  • Click Open Anyway and enter your login password to confirm.

Using Terminal:

  • You can remove the quarantine attribute quickly using the Terminal App with the command:
xattr -cr /path/to/Devoid.app
  • The path will likely be /Applications/Devoid.app.

4 · Say yes to the setup check.

On first launch Devoid looks at what your Mac already has and offers to install the rest — a few command-line tools and a few Python packages. It asks before installing either, and installs nothing you decline.

Or build it from source — works on any Mac, including Intel

You need Python 3.11 or newer, plus Node, npm, git and the Xcode command line tools (xcode-select --install).

git clone https://github.com/HarkiratMangat/gif-background-remover.git
git clone https://github.com/HarkiratMangat/Devoid.git && cd Devoid
echo "{\"skill_path\":\"$(cd ../gif-background-remover \
  && pwd)/scripts/remove_gif_background.py\"}" > devoid.config.json
npm install && python3 -m venv .venv && .venv/bin/pip install -e .
npm start

Any Python 3.11 or later does — Homebrew's, python.org's, pyenv's. An older one is refused at launch with a dialog that says why.

More in the development guide.


The Engine’s Question

Sometimes a patch of background colour sits enclosed by the artwork — inside a letter, a loop, a gap between limbs — and only on some frames.

Is it a hole you can see through, or is it part of the drawing?

Nothing in the pixels answers that. It is a question about what the artist meant, so every background remover has to either guess or hand it back. Devoid draws it where it is:

The disputed region outlined in red on untouched artwork, tagged “is this yours?”, beside a panel reading “The marked place on the artwork · held on 102 of 144 frames” with two buttons, Keep it and Cut it

◆ Keep it

Part of the drawing. It gets protected, by colour, everywhere it appears.

✕ Cut it

Background showing through. It goes, along with everything else that colour.

Not sure? Drag the seam — a divider you pull across two renders of the same file, one for each answer, both playing — and watch both before you pick.


Using It

1 · Drop files in. Whichever ones need you sort to the front, carry a mark, and take a wider tile — you spot them by shape, without reading.

Two tiles side by side: the left one outlined in red over a hatched backdrop and labelled “needs you”, the right one plain and labelled “reading it”

2 · Answer. Click Keep it or Cut it — or drag the seam first and compare.

3 · Set a size or format target, or don't. Left alone, Devoid renders at full resolution and invents nothing. Guessing at a size you didn't ask for is a mistake this app is built to avoid.

4 · Cut. The file lands beside your original as <name>_transparent.<ext>, going to _v2 rather than overwriting anything.

5 · Read the verdict. How much background went, how much of what you protected survived, and the edge quality:

The verdict: 268,431 background px removed, at most 14,822 artwork px lost, 141,169 px of artwork survive

Until something has actually been measured, it says not checked instead of guessing — in the title bar, at the same weight as done and failed:

The title bar reading “megaphone.src · gif · 144 frames · ✕ not checked”

Why It Works This Way

The ideaWhat it meansWhy it holds
Three states, not two A control reads auto · what the tool would do until you take it over. A switch can be on, off, or left to the engine the engine only fills in options left at their default — send it every option and it stops thinking
The answer is a drag Two renders, one seam, both animating you are choosing between two pictures, which is the form the question actually has
Never claims a check it didn't run No inferred size targets, no unearned verdicts not checked renders at the same weight as done and failed, rather than as an absence
Colour is never the only signal Every state carries a mark or a word too on hurricane and paper-plane from the engine's corpus, 31% and 21% of the artwork sits within RGB distance 90 of the red the app uses for this goes — close enough that hue alone would not have read (web/app.css:19)
Advice ships with its undo Every suggestion reverses exactly what it changed an undo is written at the same time as the change, so a suggestion that cannot be reversed cannot ship

Your Files

Your images never leave the machine, and nothing about them is ever sent anywhere.

Devoid contacts the network twice, both about versions rather than about your work:

When What
once a day, at launch asks GitHub what the newest Devoid and the newest engine are. Silent unless something is newer, downloads nothing, and opens a release page only if you click. Turn it off with Check for Updates on Launch in the menu, or from the dialog itself
the first launch offers to install the command-line tools and Python packages it needs. It asks first, and installs nothing you decline

Finished renders land beside their sources. Your job history goes in jobs.jsonl under ~/Library/Application Support/Devoid/, which is also where the logs and preferences are.


If Something Goes Wrong

What you see What to do
Nothing happens when I add a file Devoid cannot find the engine, or the one it found is too old. It says which at launch, and names every path it tried
It is asking to install things That is the first-launch setup check. Approve it — or install gifsicle, pngquant and webp yourself with Homebrew. It installs nothing you decline
macOS says the app is damaged, or will not open it Right-click it → Open → Open. Once only
I set $DEVOID_SKILL and it was ignored An app opened from Finder inherits no shell environment, so it never sees your variable

Tip

launchctl setenv DEVOID_SKILL /path/to/remove_gif_background.py, then reopen Devoid. Running from a checkout has neither problem, and $DEVOID_PYTHON and $DEVOID_DATA_DIR work the same way — see the development guide.


To see the logs, launch Devoid from a terminal. The engine and port diagnostics never reach the window.

/Applications/Devoid.app/Contents/MacOS/Devoid

To uninstall

Drag it to the Trash and delete ~/Library/Application Support/Devoid/.


Still stuck? Open an issue, with that console output if the engine is involved.


What it doesn't do

kind
Notarised builds outside our control No paid Apple Developer account. The variables stay unset, and no placeholder credential is supplied to make the path look testable
Install its own updates not built Squirrel.Mac, the usual mechanism, needs a signature the destination already trusts and this build is self-signed. Other mechanisms exist — Sparkle carries its own key — and none is wired up
Write to the engine for you decided It tells you when a newer one is published. git pull in that repository is yours to run
A screen-reader pass not built The states are legible without colour and the app is keyboard-operable, but no assistive-technology testing has been done and it does not claim otherwise
Opening two files at once not built You can select many — click, shift-click a range, or Select all — and act on them together. Only one opens at a time
Frame-accurate scrubbing not built The film strip highlights and counts; the artwork is a looping <img> that never seeks. Frame decoding exists for GIF in the seam (web/vendor/gifuct.js); wiring it to the film strip, and finding a decoder for WebP, AVIF and APNG, is the unbuilt part
Controls that show you engine flags decided A control may offer an engine capability; it may never show you a flag. "Keep the fade" is a control, --recover-fade-alpha is a passthrough, and you only ever meet the first
Photographs decided This separates a flat background from artwork drawn against it. It is not subject segmentation, and a photo of a person against a wall is not what it is for

Note

Outside our control is a fact nobody here can change. Decided is a choice with a reason. Not built is not built. If no reason is offered, it means there isn't one beyond nobody having done it yet.

Open work and the reasoning behind each: devoid-deferred-list.md.


More


Licence

GPL-3.0-or-later — see LICENSE. Clone it, change it, ship it; a version you distribute stays open.

The image processing is done by gif-background-remover, LGPL-3.0-or-later, which ships inside the app. Fonts under web/fonts/ are SIL OFL 1.1.

Copyright © 2026 Harkirat Mangat.

About

Cut the background out of an animated image. Answer the one question the pixels can't.

Topics

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Contributors

Languages