CLI tool
VoxelCubes/PanelCleaner avatar
VoxelCubes/PanelCleaner

PanelCleaner: Mask-Based Manga Text Removal With a Conservative Skip Policy

An AI-powered tool to clean manga panels.

479 stars64 forksPythonGPL-3.0

At a glance

What is it?
PanelCleaner is a Python CLI and GUI that runs a machine learning text detector over manga pages, turns the detections into masks, and either covers the text or skips the bubble entirely. It is built for cleaners who need predictable output more than complete coverage.
Who is it for?
Adopt PanelCleaner if you clean English or Japanese manga pages in batches and want a mask you can inspect before committing, especially if you are willing to tune a profile and accept that some bubbles will be skipped rather than badly cleaned. Do not adopt it if your pages use colored bubbles, if you need out-of-bubble text removed, or if you need in-painting as the default path rather than a fallback.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 61 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

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

DEEP OPEN-SOURCE ANALYSIS

The Problem PanelCleaner Actually Solves

Manga cleaning is repetitive work with a bad failure mode. You erase the dialogue from a bubble, and if your selection is a few pixels too wide you take a bite out of the line art. PanelCleaner targets that specific job: finding text, generating a mask over it, and covering it up. The README states the tool is designed to clean easy bubbles, and that no in-painting or out-of-bubble text removal is done. That sentence sets the boundary of the project more clearly than the feature list does.

The audience is the person who has a stack of pages and a deadline. The README says the tool is intended to save a lot of monotonous work for people who have to clean a lot of panels, while making sure it does not paint over anything it was not supposed to. The second half of that sentence is the design commitment. PanelCleaner is not trying to be the most aggressive cleaner. It is trying to be the one you can run over a chapter without reviewing every single bubble.

It is the wrong tool for a different job: removing signage, sound effects or text that sits directly on artwork. The README is explicit that out-of-bubble text removal is not done, and the mask limitation section says only grayscale is supported, which means white, black or gray bubbles. Colored bubbles are outside the current scope.

How Detection, Masking and Denoising Fit Together

The pipeline starts with an external detector. The README credits the AI used to detect text and generate the initial mask to dmMaze/comic-text-detector, and says PanelCleaner uses it as a starting point and improves on the output. So the raw model output is not the product. It is the input to a second stage.

The README's annotated example shows what that second stage does. Boxes are drawn where the AI found text. A green mask marks where text was detected precisely. Purple masks are expansions that cover nearby text the detector missed, along with JPEG artifacts. Blue masks are a tight-fit case where the border around the mask edge is denoised for final cleanup without affecting the rest of the image. That layering is the actual mechanism: detect, expand to absorb error, then clean the seams.

The output stage gives you a choice. The README says the program can output either just the transparent mask layer or the mask applied to the original image. That matters for a production workflow, because the mask layer is reviewable. You can composite it yourself, keep it, or discard it without touching the source page.

In-painting is a separate path, not the default. The feature list mentions in-painting bubbles with LaMa machine learning that cannot simply be masked out. So the order is mask first, inpaint when masking is not enough. That ordering is why the tool can promise not to paint over art: painting is the exception, not the routine.

Installation Paths and the CUDA Split

There are two install routes, and the README states the pre-built binary (exe or elf) from the releases section is recommended for most users. The alternative is installing to your local Python interpreter with pip. The program requires Python 3.10 or newer.

The split matters. The README states the pre-built binaries do not support CUDA acceleration. To use CUDA you must install with pip and install the appropriate pytorch version for your system. If your machine has a usable GPU and you care about throughput on large batches, that single sentence decides your install method before you download anything.

Both routes share a first-launch cost. The README notes all versions need to download model data on first launch, approximately 500MB, and that this data does not need to be downloaded again if PanelCleaner updates. Plan for that download on a machine that will actually run the tool, not on a locked-down build box.

The README also states no internet connection is required after installing the model data. That is a real constraint on deployment, not a marketing line: once the models are local, the tool runs offline.

Profiles, OCR and What the Config Surface Looks Like

The feature list describes a plethora of options to customize the cleaning process and the ability to save multiple presets as profiles, and points to the default profile file at media/default.conf for a list of all options. That file is the reference you want open while tuning, because the README does not enumerate the keys inline. What the material supports is the existence of a default profile with named settings and a profile system on top of it; it does not give individual key names, so anyone quoting specific keys is going beyond what is published here.

OCR is a second output mode rather than a cleaning feature. The README says the tool can run OCR on the pages and output the text to a file, and that you can review cleaning and OCR output, including editing the OCR output interactively before saving it. OCR is Japanese only, while cleaning supports Japanese and English. If your workflow is translation-adjacent, that asymmetry is worth noting: the cleaning step tolerates English, the text extraction step does not.

The GUI is part of the shipped surface, with dark, light and system themes, and the interface is available in English, German, Bulgarian and Spanish. The README also mentions detailed analytics on the cleaning process, to see how your settings affect the results. That is the feedback loop for profile tuning: change a setting, look at the analytics, decide whether the change helped.

The Skip Policy Is the Whole Design, and the Main Cost

The limitations section contains the most important sentence in the repository: due to the conservative approach taken in the selection of masks, if the program cannot clean the bubble to a satisfying degree, it will skip that bubble outright. This does, however, also prevent false positives.

That is a deliberate trade. A skipped bubble is visible work left for a human. A false positive is damage to artwork that may not be obvious until later. PanelCleaner chooses the first failure mode. If your review process assumes every bubble is handled, this tool will break that assumption, and the README's own numbers say the detector misses little bits of text or misclassifies part of the bubble in a way that prevents cleaning, typically affecting between 2 and 8 percent of bubbles depending on settings. Those figures come from the project's testing, not from an independent run.

The second hard limit is color. For masks, only grayscale is currently supported, so the tool can cover text in white, black or gray bubbles but not colored ones. The README also lists supported input formats (.jpeg, .jpg, .png, .bmp, .tiff, .tif, .jp2, .dib, .webp, .ppm) and notes .psd is export only. A page with colored speech bubbles is not a tuning problem you can solve with a profile. It is a boundary of the current implementation.

Where It Sits Next to a Plain In-Painting Tool

The obvious alternative approach is to run an in-painting model directly over the text region and let it reconstruct the background. That is what LaMa does inside PanelCleaner, but only as a fallback for bubbles that cannot simply be masked out, per the README's feature list. A standalone in-painting workflow inverts the priority: reconstruction is the primary method, and masking is not used at all.

The difference shows up in what you get back. A direct in-painting pass always produces an output image, so coverage looks complete. It also always writes generated pixels into the page, and on a flat white bubble those generated pixels rarely match the surrounding tone exactly. PanelCleaner's mask-first path writes flat coverage where it can and only generates pixels when it must, which is why the README can claim it avoids painting over parts of the image that are not text. The cost of that restraint is the skipped bubbles described above.

Neither approach is strictly better. If your pages are heavily textured or photographic and masking would leave an obvious flat patch, a reconstruction-first tool is the more natural fit. If your pages are the usual flat-tone manga bubble, PanelCleaner's mask-first ordering is the one that keeps the artwork untouched by default. The README's own framing supports this reading: masking is the default, in-painting is the exception.

Maintenance, Licensing and Upgrade Cost

PanelCleaner is licensed GPL-3.0, per the repository metadata and the license badge in the README. This is a copyleft licence. If you distribute a modified version, the licence terms apply to that distribution. Whether your specific use counts as distribution, and what obligations follow, is a question for your own legal review; nothing here should be read as legal advice.

The release cadence visible in the material is uneven. The listed releases are 2.9.3 in October 2024, 2.10.0 in November 2024, and 2.11.11 (labelled Release 2.11.0) in December 2024, while the repository's last push is dated 2026-07-16. The repository is not archived. A long gap between the last tagged release and the last push is worth checking against the commit history before you build a pipeline around a specific version, because the material here does not show what happened in between.

The practical upgrade cost is low in one respect and non-trivial in another. The README states the model data will not need to be downloaded again if PanelCleaner updates, so the 500MB first-launch download is a one-time cost per machine. But if you have tuned profiles, an upgrade can change detector or masking behaviour, and your saved settings may produce different results. That is the reason to keep a small set of reference pages and re-run them after any version bump rather than trusting that a profile still behaves the same way.

Editorial conclusion

Adopt PanelCleaner if you clean English or Japanese manga pages in batches and want a mask you can inspect before committing, especially if you are willing to tune a profile and accept that some bubbles will be skipped rather than badly cleaned. Do not adopt it if your pages use colored bubbles, if you need out-of-bubble text removed, or if you need in-painting as the default path rather than a fallback. Before installing, verify three things: that your Python is 3.10 or newer, that you have roughly 500MB free for the first-launch model download, and that you know whether you want the pre-built binary (no CUDA) or the pip install (CUDA possible). The deciding question is whether a skipped bubble costs you less time than a wrongly painted one.

Official sources

  1. Issues
  2. License: GPL-3.0
  3. README
  4. Releases
  5. VoxelCubes/PanelCleaner on GitHub
Community notes

Community notes