AI Services (RemBG & IOPaint)
Overzicht
Section titled “Overzicht”Magic eVERSE draait twee lokale AI-services voor beeldbewerking, gemanaged via één Docker Compose file.
| Service | Container | Intern Port | Extern Port | Model | Functie |
|---|---|---|---|---|---|
| RemBG | magic_rembg | 5050 | 5050 | isnet-general-use | Achtergrond verwijderen |
| IOPaint | magic_iopaint | 8080 | 5055 | LaMa | Inpainting (logo/object verwijderen) |
Docker Compose: /mnt/data/magic_omniverse/magic_services/docker-compose.yml
Toegangspunten (Nginx)
Section titled “Toegangspunten (Nginx)”| URL | Service | Auth | Gebruik |
|---|---|---|---|
services.magicomniverse.online/rembg/ | RemBG | API key via nginx | Centraal, voor alle tools |
services.magicomniverse.online/iopaint/ | IOPaint | Geen | Centraal, voor alle tools |
modal.magicomniverse.online/rembg/ | RemBG | API key + device-auth | Modal/storefront gebruik |
modal.magicomniverse.online/iopaint/ | IOPaint | Geen (eigen CORS) | Modal/storefront gebruik |
rembg.magiceverse.online (legacy) | RemBG | IP whitelist (Spranz) | Legacy, alleen Spranz server |
RemBG API
Section titled “RemBG API”Base URL: http://localhost:5050 (intern) of https://services.magicomniverse.online/rembg
Authenticatie
Section titled “Authenticatie”Header: X-API-Key: <key>
Bij gebruik via services.magicomniverse.online wordt de API key automatisch door nginx geïnjecteerd.
Endpoints
Section titled “Endpoints”POST /remove-background — Bestand uploaden
Section titled “POST /remove-background — Bestand uploaden”curl -X POST http://localhost:5050/remove-background \ -H "X-API-Key: YOUR_KEY" \ -F "file=@logo.png" \ -F "model=isnet-general-use" \ --output result.pngParameters:
| Parameter | Type | Default | Beschrijving |
|---|---|---|---|
file | File (multipart) | verplicht | Input afbeelding |
model | string | isnet-general-use | AI model (zie /models) |
clean | bool | true | Post-processing: verwijdert ingesloten achtergrond (bv. wit in letter O) |
bg_color | string | auto | Achtergrondkleur detectie: auto, white, black, #RRGGBB |
tolerance | int | 30 | Kleur matching tolerantie (0-255) |
Response: PNG image met transparante achtergrond.
GET /remove-background-url — Via URL
Section titled “GET /remove-background-url — Via URL”curl "http://localhost:5050/remove-background-url?url=https://example.com/logo.png" \ -H "X-API-Key: YOUR_KEY" \ --output result.pngZelfde parameters als POST, plus url (verplicht).
POST /remove-background-base64 — Base64 input
Section titled “POST /remove-background-base64 — Base64 input”curl -X POST http://localhost:5050/remove-background-base64 \ -H "X-API-Key: YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"image": "data:image/png;base64,iVBOR...", "model": "u2net", "clean": true}'Response: {"image": "data:image/png;base64,..."}
GET /models — Beschikbare modellen
Section titled “GET /models — Beschikbare modellen”{ "default": "isnet-general-use", "models": [ {"name": "birefnet-general", "description": "BiRefNet - beste kwaliteit, scherpste randen"}, {"name": "birefnet-general-lite", "description": "BiRefNet Lite - snel, goede kwaliteit"}, {"name": "u2net", "description": "U2Net - general purpose, klassiek"}, {"name": "u2netp", "description": "U2Net lightweight - sneller maar minder nauwkeurig"}, {"name": "u2net_human_seg", "description": "U2Net - geoptimaliseerd voor mensen"}, {"name": "silueta", "description": "Silueta - vergelijkbaar met u2net maar kleiner"}, {"name": "isnet-general-use", "description": "ISNet - goed voor algemene objecten (default)"} ]}GET /health — Health check (geen auth)
Section titled “GET /health — Health check (geen auth)”{"status": "ok", "service": "rembg", "version": "1.3.0", "auth_enabled": true}Post-processing: Clean Enclosed Background
Section titled “Post-processing: Clean Enclosed Background”De clean parameter (default true) verwijdert ingesloten achtergrondgebieden die rembg mist. Bijvoorbeeld:
- Wit binnen de letter O of B in een logo
- Kleine achtergrondrestanten binnen het onderwerp
Werking:
- Detecteert achtergrondkleur via randen/hoeken
- Vindt pixels met die kleur die nog steeds zichtbaar zijn (alpha > 128)
- Maakt deze pixels transparant
- Verwijdert ook inverse kleuren (bij donkere achtergrond: witte eilandjes en vice versa)
IOPaint API
Section titled “IOPaint API”Base URL: http://localhost:5055 (intern) of https://services.magicomniverse.online/iopaint
IOPaint gebruikt het LaMa (Large Mask) model voor inpainting - het intelligent invullen van gemaskeerde gebieden.
POST /api/v1/inpaint — Inpainting
Section titled “POST /api/v1/inpaint — Inpainting”const response = await fetch('https://services.magicomniverse.online/iopaint/api/v1/inpaint', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ image: '<base64 encoded image without data: prefix>', mask: '<base64 encoded mask without data: prefix>', hd_strategy: 'Crop', hd_strategy_crop_margin: 196, hd_strategy_crop_trigger_size: 800, hd_strategy_resize_limit: 2048 })});// Response: PNG blobParameters:
| Parameter | Type | Beschrijving |
|---|---|---|
image | string (base64) | Input afbeelding, zonder data:image/...;base64, prefix |
mask | string (base64) | Mask PNG: wit = verwijderen, zwart = behouden |
hd_strategy | string | Crop (aanbevolen), Resize, of Original |
hd_strategy_crop_margin | int | Marge rondom masker bij crop (px) |
hd_strategy_crop_trigger_size | int | Minimale afbeeldingsgrootte voor HD strategy |
hd_strategy_resize_limit | int | Max resize limiet |
Response: PNG image blob (geen JSON).
Mask formaat: Zwart-wit PNG, zelfde dimensies als input:
- Wit (255,255,255) = te verwijderen gebied
- Zwart (0,0,0) = te behouden gebied
Integratie in Logo Horloge Management Tool
Section titled “Integratie in Logo Horloge Management Tool”De editor op logohorlogemanagement.magiceverse.online gebruikt deze services:
| Functie | Service | Aanroep methode | Endpoint |
|---|---|---|---|
| Achtergrond verwijderen | RemBG | PHP proxy | /editor/api/rembg-proxy.php → services.magicomniverse.online/rembg |
| Logo/object verwijderen (gratis) | IOPaint | Direct JS fetch | /editor/api/iopaint-proxy.php → services.magicomniverse.online/iopaint |
| Logo/object verwijderen (betaald) | Clipdrop | PHP proxy | /editor/api/clipdrop-cleanup.php → Clipdrop API |
| Moodshot generatie | Claid AI + RemBG | PHP proxy | /editor/api/claid-moodshot.php |
Editor AI Service Selector
Section titled “Editor AI Service Selector”De editor heeft een toggle om te kiezen tussen IOPaint (gratis, lokaal) en Clipdrop (betaald, cloud):
// In editor/index.phplet aiService = localStorage.getItem('aiService') || 'iopaint'; // default IOPaintDe keuze wordt opgeslagen in localStorage zodat de voorkeur behouden blijft.
Beheer
Section titled “Beheer”Containers starten/stoppen
Section titled “Containers starten/stoppen”cd /mnt/data/magic_omniverse/magic_servicesdocker compose up -d # Start beide servicesdocker compose restart rembg # Herstart alleen rembgdocker compose restart iopaint # Herstart alleen iopaintdocker compose logs -f rembg # Volg rembg logsHealth checks
Section titled “Health checks”# RemBGcurl http://localhost:5050/health
# IOPaintcurl -s http://localhost:5055/ | head -1 # Moet HTML teruggeven (web UI)Resources
Section titled “Resources”Beide services hebben gelimiteerde resources:
- Memory: 2GB reserved, 4GB max
- CPU: 2 cores reserved, 4 cores max
- Models: Cached in Docker volumes (
rembg_models,iopaint_models)
Bronbestanden
Section titled “Bronbestanden”| Bestand | Locatie |
|---|---|
| Docker Compose | /mnt/data/magic_omniverse/magic_services/docker-compose.yml |
| RemBG app (actief) | /mnt/data/magic_omniverse/magic_services/rembg-app.py |
| RemBG frontend | /mnt/data/magic_omniverse/magic_services/static/ |
| Nginx services | /etc/nginx/sites-available/services.magicomniverse.online |
| Nginx rembg (legacy) | /etc/nginx/sites-available/rembg |