Add BEN2 and BiRefNet-HR as selectable Remove Background models
BEN2 becomes the new default local backend (clean cutouts, strong on hair/fur edges), with BiRefNet-HR available as a high-res/print alternate and U2Net kept as the lightweight fallback. Both are MIT-licensed and download weights from HuggingFace on first use (cached via the existing hf_cache bind mount), unlike U2Net/SAM which need an explicit download script. - config: new BG_REMOVAL_MODEL setting (default "ben2") - tools.py: remove-background-base64 now tries local backends in order (request.model override > BG_REMOVAL_MODEL > ben2/u2net), falling back to rembg's birefnet-general session as a last resort - requirements.gpu.txt / Dockerfile.gpu: add ben2 + transformers deps needed for the new backends, with a build-time smoke test for ben2 - frontend: model dropdown in the Remove Background dialog, threaded through api.js to the new request field Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ro4PwQKvSc3CH19LSN21Ht
This commit is contained in:
@@ -49,6 +49,11 @@ class Image_remove_background_class {
|
||||
title: 'Remove Background',
|
||||
params: [
|
||||
{ name: "info", title: "AI will detect the main subject and remove the background.", type: "label" },
|
||||
{
|
||||
name: "model", title: "Model:", value: "auto", type: "select",
|
||||
values: ["auto", "ben2", "birefnet-hr", "u2net"],
|
||||
comment: "auto = best available (BEN2 by default). BiRefNet-HR is slower but sharper on high-res/print work.",
|
||||
},
|
||||
{ name: "new_layer", title: "Create as new layer:", value: true },
|
||||
{ name: "trim_result", title: "Trim transparent edges:", value: false },
|
||||
],
|
||||
@@ -74,7 +79,7 @@ class Image_remove_background_class {
|
||||
var imageData = canvas.toDataURL('image/png').split(',')[1];
|
||||
|
||||
// Call backend API
|
||||
var result = await apiService.removeBackground(imageData);
|
||||
var result = await apiService.removeBackground(imageData, params.model);
|
||||
|
||||
// Create image from result
|
||||
var resultImage = new Image();
|
||||
|
||||
@@ -72,11 +72,12 @@ class ApiService {
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove background from image using AI (rembg)
|
||||
* Remove background from image using AI (BEN2 / BiRefNet-HR / U2Net / rembg)
|
||||
* @param {string} imageData - Base64 encoded image data
|
||||
* @returns {Promise<{result: string, width: number, height: number}>} - Base64 encoded result with transparency
|
||||
* @param {string} [model='auto'] - "auto", "ben2", "birefnet-hr", "u2net", or "rembg"
|
||||
* @returns {Promise<{result: string, width: number, height: number, method: string}>} - Base64 encoded result with transparency
|
||||
*/
|
||||
async removeBackground(imageData) {
|
||||
async removeBackground(imageData, model = 'auto') {
|
||||
const response = await fetch(`${this.baseUrl}/tools/remove-background-base64`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
@@ -84,6 +85,7 @@ class ApiService {
|
||||
},
|
||||
body: JSON.stringify({
|
||||
image: imageData,
|
||||
model: model,
|
||||
}),
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user