rmbg / app.py
Xlnk's picture
Update app.py
1bbc284 verified
from flask import Flask, request, Response
from rembg import remove
from rembg.session_factory import new_session
import io
app = Flask(__name__)
# FULL U²-Net
session = new_session("u2net")
HTML = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Xlnk RMBG - AI Background Remover</title>
<link rel="icon" type="image/svg+xml" href="https://me.xo.je/icon.svg">
<meta name="description" content="Remove backgrounds from images instantly with Xlnk RMBG. Drag & drop images from anywhere, including Google Images. Auto-download transparent PNGs.">
<meta name="keywords" content="background removal, AI background remover, remove background online, transparent PNG, drag drop image, U2-Net, Xlnk RMBG">
<meta name="robots" content="index, follow">
<!-- Open Graph for social sharing -->
<meta property="og:title" content="Xlnk RMBG - AI Background Remover">
<meta property="og:description" content="Drag & drop images from anywhere and remove the background instantly. Full U²-Net AI engine.">
<meta property="og:type" content="website">
<meta property="og:image" content="https://huggingface.co/spaces/Xlnk/rmbg/resolve/main/preview.png">
<meta property="og:url" content="https://huggingface.co/spaces/Xlnk/rmbg">
<style>
html, body {
margin: 0;
height: 100%;
background: #0b0f19;
display: flex;
justify-content: center;
align-items: center;
color: white;
font-family: sans-serif;
}
#dropZone {
width: 100vw;
height: 100vh;
border: 2px dashed #555;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
text-align: center;
}
#dropZone.dragover { background-color: #1b2030; }
input { display: none; }
</style>
</head>
<body>
<div id="dropZone">Drop image from anywhere</div>
<form id="uploadForm" method="post" enctype="multipart/form-data">
<input type="file" id="fileInput" name="file" />
</form>
<script>
const dropZone = document.getElementById("dropZone");
const fileInput = document.getElementById("fileInput");
const form = document.getElementById("uploadForm");
dropZone.addEventListener("click", () => fileInput.click());
fileInput.addEventListener("change", () => {
if(fileInput.files.length > 0) form.submit();
});
dropZone.addEventListener("dragover", e => {
e.preventDefault();
dropZone.classList.add("dragover");
});
dropZone.addEventListener("dragleave", e => {
dropZone.classList.remove("dragover");
});
dropZone.addEventListener("drop", e => {
e.preventDefault();
dropZone.classList.remove("dragover");
// Local files
if (e.dataTransfer.files.length > 0) {
fileInput.files = e.dataTransfer.files;
form.submit();
}
// Drag from browser (Google Images, etc)
else {
let url = e.dataTransfer.getData('text/uri-list');
if(url){
fetch(url)
.then(res => res.blob())
.then(blob => {
let dt = new DataTransfer();
dt.items.add(new File([blob], "image.png", {type: blob.type}));
fileInput.files = dt.files;
form.submit();
});
}
}
});
</script>
</body>
</html>
"""
@app.route("/", methods=["GET", "POST"])
def index():
if request.method == "POST":
file = request.files.get("file")
if not file:
return "No file", 400
input_bytes = file.read()
output_bytes = remove(input_bytes, session=session, alpha_matting=False)
return Response(
output_bytes,
mimetype="image/png",
headers={"Content-Disposition": "attachment; filename=xlnk-rmbg.png"}
)
return HTML
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)