From apogee
Remove backgrounds from images using local AI (rembg). Use when removing backgrounds from character art, mascot images, photos, or any image that needs a transparent background.
How this skill is triggered — by the user, by Claude, or both
Slash command
/apogee:bg-removeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Remove backgrounds from images using rembg (local, offline, no data sent externally). Outputs RGBA PNG with proper transparency.
Remove backgrounds from images using rembg (local, offline, no data sent externally). Outputs RGBA PNG with proper transparency.
Arguments after /bg-remove:
--trim (optional) — auto-trim transparent padding after removal--output <path> (optional) — custom output path. Default: same directory, <name>-transparent.pngExamples:
/bg-remove assets/character/mascot.png/bg-remove image.png --trim/bg-remove image.png --output ~/Desktop/result.pngrembg is installed in a dedicated venv. Always activate it before use:
source ~/.claude/tools/rembg-env/bin/activate
If the venv doesn't exist, install it:
python3 -m venv ~/.claude/tools/rembg-env && source ~/.claude/tools/rembg-env/bin/activate && pip install "rembg[cpu,cli]"
Model files are cached in ~/.u2net/ (downloaded on first use per model, ~170MB for birefnet-general).
sips -g pixelWidth -g pixelHeight <path>Use the birefnet-general model — it produces the best results for character art and general images.
source ~/.claude/tools/rembg-env/bin/activate && rembg i -m birefnet-general <input> <output>
Model choice: Always use birefnet-general. It gives clean edges and handles both character art and photographic subjects well.
The Read tool renders transparency as black, so you MUST verify by compositing on a colored background:
source ~/.claude/tools/rembg-env/bin/activate && python3 -c "
from PIL import Image
import numpy as np
# Load result
img = Image.open('<output>').convert('RGBA')
alpha = np.array(img)[:,:,3]
total = alpha.size
transparent = np.sum(alpha == 0)
opaque = np.sum(alpha == 255)
print(f'Dimensions: {img.size}')
print(f'Transparent: {transparent/total*100:.1f}%')
print(f'Opaque: {opaque/total*100:.1f}%')
print(f'Corners alpha: TL={alpha[0,0]} TR={alpha[0,-1]} BL={alpha[-1,0]} BR={alpha[-1,-1]}')
# Composite on magenta for visual verification
bg = Image.new('RGBA', img.size, (255, 0, 255, 255))
bg.paste(img, (0, 0), img)
bg.save('<output_dir>/verify-magenta.png')
print('Verification image saved')
"
Then view the magenta verification image with the Read tool. The magenta should only show where background was removed.
If --trim was requested, trim transparent padding:
source ~/.claude/tools/rembg-env/bin/activate && python3 -c "
from PIL import Image
import numpy as np
img = Image.open('<output>').convert('RGBA')
alpha = np.array(img)[:,:,3]
# Find bounding box of non-transparent pixels
rows = np.any(alpha > 0, axis=1)
cols = np.any(alpha > 0, axis=0)
rmin, rmax = np.where(rows)[0][[0, -1]]
cmin, cmax = np.where(cols)[0][[0, -1]]
# Add small padding (2% of dimensions)
pad_h = max(int(img.height * 0.02), 4)
pad_w = max(int(img.width * 0.02), 4)
rmin = max(0, rmin - pad_h)
rmax = min(img.height - 1, rmax + pad_h)
cmin = max(0, cmin - pad_w)
cmax = min(img.width - 1, cmax + pad_w)
cropped = img.crop((cmin, rmin, cmax + 1, rmax + 1))
cropped.save('<output>')
print(f'Trimmed: {img.size} -> {cropped.size}')
"
Done: background removed
Source: <input_path>
Output: <output_path>
Dimensions: <width>x<height>
Transparent pixels: <percent>%
Model: birefnet-general (local, offline)
birefnet-general — best general-purpose model for this task.npx claudepluginhub mishagin-dev/apogee --plugin apogeeGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.