git:20260827.ae998b6 to git:20260827.d2b68b3
17 added, 13 removed. Audit B to B.
---
name: image-region-remove-key-color-app
description: >-
Interactive Gradio UI to paint a region and remove solid key-color background
(white / green / magenta) only inside that selection. Use when enclosed white
islands remain after border/both keying, for localized 白底抠图, paint-to-erase
chroma patches, or selective color-key cleanup before Godot sprite import.
---
# Image Region Remove Key Color App
Paint a **region mask** in a local Gradio UI, then remove **key-color pixels only inside that region** (global keying scoped to the brush). Preserves white/light subject pixels outside the paint strokes.
Use after [image-remove-white-background](../image-remove-white-background/SKILL.md) when edge flood fill leaves enclosed white islands (e.g. gaps inside a silhouette).
## Rules
- When this skill applies, read and follow [skill-dependency-manager](../skill-dependency-manager.md) — run scripts as documented, install missing tools into `.dependency/`.
+ When this skill applies, read and follow [skill-dependency-manager](../skill-dependency-manager.md) �?run scripts as documented, install missing tools into `.dependency/`.
- Run `app.py` through the **`image-region-remove-key-color-app` manifest entry** (`.dependency/image-region-remove-key-color-app/.venv/`). Never use host `python`, `py`, `python3`, or any interpreter outside `.dependency/`.
- - Do not hand-write a one-off Gradio app — use the bundled script at `.ai/image-region-remove-key-color-app/app.py`.
+ - Do not hand-write a one-off Gradio app �?use the bundled script at `.ai/image-region-remove-key-color-app/app.py`.
- `populated: false` is not a reason to skip. Install first, set `populated: true`, retry the same command.
- This skill is **interactive**: launch the UI, give the user the local URL, wait for them to paint / Apply / Download.
## Setup (first run)
From project root:
```bash
.dependency/python/python -m venv .dependency/image-region-remove-key-color-app/.venv
.dependency/image-region-remove-key-color-app/.venv/Scripts/python.exe -m pip install Pillow gradio
```
If `python -m venv` fails (missing `venv` / `ensurepip`), create the env with `virtualenv` from another populated skill venv, then install packages into the new env:
```bash
.dependency/rembg/.venv/Scripts/python.exe -m pip install virtualenv
.dependency/rembg/.venv/Scripts/python.exe -m virtualenv .dependency/image-region-remove-key-color-app/.venv
.dependency/image-region-remove-key-color-app/.venv/Scripts/python.exe -m pip install Pillow gradio
```
Register in `.dependency/manifest.json`:
```json
"image-region-remove-key-color-app": {
"populated": true,
"bin": ".dependency/image-region-remove-key-color-app/.venv/Scripts/python.exe"
}
```
Use `bin/python` on Unix.
## Quick Start
```bash
# Preload an image (opens http://127.0.0.1:7860)
.dependency/image-region-remove-key-color-app/.venv/Scripts/python.exe .ai/image-region-remove-key-color-app/app.py path/to/sprite.png
# Custom port, no auto-open browser (agent / headless)
.dependency/image-region-remove-key-color-app/.venv/Scripts/python.exe .ai/image-region-remove-key-color-app/app.py path/to/sprite.png --port 7861 --no-browser
```
Download uses the **same filename** as the source (forced `.png`). No share / no save-to-disk folder.
## UI workflow
- 1. **Upload** the image via the file control (or preload via CLI) — do not drop into the editor canvas.
+ 1. **Upload** the image via the file control (or preload via CLI) �?do not drop into the editor canvas.
2. Transparent areas appear as **gray** in the editor (download still has real alpha).
3. **Paint** over local white / chroma patches to remove.
4. Choose **Key color** / tolerance / feather if needed.
- 5. Click **Apply** → preview (gray = transparent).
- 6. Click **Download** → browser download with the original name.
+ 5. Click **Apply** �?preview (gray = transparent).
+ 6. Click **Download** �?browser download with the original name.
7. Click **Stop server** when done (or `Ctrl+C` in the terminal).
## Key color
Use the UI color picker (default `#FFFFFF`). CLI `--preset` only sets the initial color and tolerance:
| `--preset` | Key color | Default tolerance |
|------------|-----------|-------------------|
| `white` *(default)* | `#FFFFFF` | 25 |
| `green` | `#00FF00` | 40 |
| `magenta` | `#FF00FF` | 40 |
## Agent workflow
- 1. **When** — user needs selective / painted removal of flat key-color patches; full-image `global` would damage white subjects; `border`/`both` left enclosed islands.
- 2. **Ensure deps** — manifest entry + venv with Pillow + Gradio.
- 3. **Launch** — run `app.py` with the user image path; prefer `--no-browser` if the agent cannot open a GUI browser, and print `http://127.0.0.1:<port>`.
- 4. **Hand off** — tell the user to paint, Apply, then Download (same filename as source).
- 5. **Verify** — after the user confirms download, they are done; do not overwrite sources.
- 6. **Stop** — click **Stop server** in the UI, or terminate the Gradio process when the user is done.
+ 1. **When** �?user needs selective / painted removal of flat key-color patches; full-image `global` would damage white subjects; `border`/`both` left enclosed islands.
+ 2. **Ensure deps** �?manifest entry + venv with Pillow + Gradio.
+ 3. **Launch** �?run `app.py` with the user image path; prefer `--no-browser` if the agent cannot open a GUI browser, and print `http://127.0.0.1:<port>`.
+ 4. **Hand off** �?tell the user to paint, Apply, then Download (same filename as source).
+ 5. **Verify** �?after the user confirms download, they are done; do not overwrite sources.
+ 6. **Stop** �?click **Stop server** in the UI, or terminate the Gradio process when the user is done.
## Defaults
| Option | Default | Notes |
|--------|---------|-------|
| Download name | same as source (`.png`) | Prepared on Apply via `DownloadButton` |
| `--preset` | `white` | Match the batch key skill |
| `--tolerance` | preset-specific | Raise for gray fringes |
| `--feather` | `2` | Softens hole edges inside the paint mask |
| `--port` | `7860` | Change if busy |
| Share | off | `share=False`; no share UI |
## Troubleshooting
| Issue | Fix |
|-------|-----|
| Manifest / venv missing | Follow **Setup**; update manifest |
| `No paint strokes found` | Brush visibly over the white islands; ensure strokes are on the editor layers |
- | Subject holes outside paint | Only paint the background islands — strokes gate keying |
- | Leftover fringe in region | Raise tolerance by 5–10 |
+ | Subject holes outside paint | Only paint the background islands �?strokes gate keying |
+ | Leftover fringe in region | Raise tolerance by 5�?0 |
| Port in use | Pass `--port 7861` (etc.) |
| Gradio import error | Reinstall in the skill venv: `pip install -U Pillow gradio` |
+
+ ## CLI
+
+ Copy-paste commands: [cli/image-region-remove-key-color-app.md](../../../cli/image-region-remove-key-color-app.md)
## Related
- Full-image / batch keying: [image-remove-white-background](../image-remove-white-background/SKILL.md)
- AI matting: [image-remove-background](../image-remove-background/SKILL.md)