#!/usr/bin/env python3 """ TRANSPARENCY WIPE SCRIPT Removes solid color backgrounds from PNG images Author: HIPO Date: 12.01.2026 """ import os from PIL import Image import numpy as np from pathlib import Path def remove_solid_background(image_path, output_path, tolerance=30): """ Remove solid color background from image Args: image_path: Path to input image output_path: Path to save output tolerance: Color difference tolerance (0-255) """ try: # Open image img = Image.open(image_path).convert("RGBA") data = np.array(img) # Get corner colors (likely background) corners = [ data[0, 0], # Top-left data[0, -1], # Top-right data[-1, 0], # Bottom-left data[-1, -1] # Bottom-right ] # Find most common corner color bg_color = corners[0][:3] # Use top-left as default # Create mask for background color r, g, b, a = data.T bg_r, bg_g, bg_b = bg_color # Find pixels matching background color (within tolerance) mask = ( (np.abs(r - bg_r) < tolerance) & (np.abs(g - bg_g) < tolerance) & (np.abs(b - bg_b) < tolerance) ) # Make background transparent data[..., 3][mask.T] = 0 # Save result = Image.fromarray(data) result.save(output_path, "PNG") return True except Exception as e: print(f"❌ Error processing {image_path}: {e}") return False def is_solid_background(image_path): """ Check if image likely has solid background Returns: True if corners are similar color """ try: img = Image.open(image_path).convert("RGBA") data = np.array(img) corners = [ tuple(data[0, 0]), tuple(data[0, -1]), tuple(data[-1, 0]), tuple(data[-1, -1]) ] # Check if all corners are similar first = corners[0][:3] similar = all( abs(c[0] - first[0]) < 30 and abs(c[1] - first[1]) < 30 and abs(c[2] - first[2]) < 30 for c in corners ) # Also check if corner is white/black/gray r, g, b = first is_white = r > 240 and g > 240 and b > 240 is_black = r < 15 and g < 15 and b < 15 is_gray = abs(r - g) < 20 and abs(g - b) < 20 return similar and (is_white or is_black or is_gray) except Exception as e: return False def batch_process_folder(folder_path, dry_run=True): """ Process all PNG images in folder Args: folder_path: Folder to process dry_run: If True, only report what would be done """ folder = Path(folder_path) processed = 0 skipped = 0 errors = 0 print(f"\n{'πŸ” DRY RUN' if dry_run else 'πŸ”₯ PROCESSING'}: {folder_path}") print("=" * 60) for img_path in folder.rglob("*.png"): # Skip backup folders if "BACKUP" in str(img_path) or "_backup" in str(img_path): continue # Check if needs processing if is_solid_background(img_path): if dry_run: print(f"βœ… Would process: {img_path.name}") processed += 1 else: print(f"πŸ”„ Processing: {img_path.name}") if remove_solid_background(img_path, img_path): processed += 1 else: errors += 1 else: skipped += 1 print("\n" + "=" * 60) print(f"πŸ“Š RESULTS:") print(f" βœ… {'Would process' if dry_run else 'Processed'}: {processed}") print(f" ⏭️ Skipped (already transparent): {skipped}") if errors > 0: print(f" ❌ Errors: {errors}") print("=" * 60) if __name__ == "__main__": import sys print(""" ╔═══════════════════════════════════════════════════════════╗ β•‘ 🎨 TRANSPARENCY WIPE TOOL v1.0 β•‘ β•‘ By HIPO - Hipodevil666 Studiosβ„’ β•‘ β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β• """) if len(sys.argv) < 2: print("Usage:") print(" DRY RUN (safe): python3 transparency_wipe.py assets/references/ --dry-run") print(" LIVE RUN: python3 transparency_wipe.py assets/references/ --live") print("\nWARNING: ALWAYS run dry-run first!") sys.exit(1) folder = sys.argv[1] dry_run = "--live" not in sys.argv if not dry_run: print("\n⚠️ WARNING: LIVE RUN MODE! This will modify images!") response = input("Are you sure? Type 'YES' to continue: ") if response != "YES": print("❌ Cancelled.") sys.exit(0) batch_process_folder(folder, dry_run=dry_run) print("\nβœ… Done!") if dry_run: print("πŸ’‘ Run with --live to actually process images")