Back to Home
Gistify Snippet
kyiov
Sep 3ยท1 file(s)
Public

Scraper removebg

Scraper removebg

#github-gist#javascript#gist:d11dd671e13c5e361b11a99ecf495a6f#gistsync:2026-09-02T12:40:39Z
0
Raw
removebg.jsjavascript
181 lines
1
2
3import * as __ns_749 from 'axios'
4const axios = __ns_749.default
5import * as __ns_750 from 'form-data'
6const FormData = __ns_750.default
7import * as __ns_751 from 'node:url'
8const pathToFileURL = __ns_751.pathToFileURL
9
10const UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36";
11
12async function resolveImageBuffer(input) {
13 if (Buffer.isBuffer(input)) return input;
14 if (typeof input === "string") {
15 if (input.startsWith("http")) {
16 const res = await axios.get(input, { responseType: "arraybuffer", headers: { "User-Agent": UA } });
17 return Buffer.from(res.data);
18 }
19 if (input.includes("base64,")) return Buffer.from(input.split(",")[1], "base64");
20 return Buffer.from(input, "base64");
21 }
22 throw new Error("Invalid image format");
23}
24
25async function bgclearRemoveBg(input) {
26 const buf = await resolveImageBuffer(input);
27 const form = new FormData();
28 form.append("file", buf, { filename: "image.png", contentType: "image/png" });
29
30 const res = await axios.post("https://bgclear.ai/api/remove", form, {
31 headers: {
32 ...form.getHeaders(),
33 origin: "https://bgclear.ai",
34 referer: "https://bgclear.ai/",
35 "user-agent": UA,
36 },
37 timeout: 45000,
38 });
39
40 if (!res.data || !res.data.success || !res.data.variants?.transparent) {
41 throw new Error(res.data?.message || "BGClear AI gagal memproses gambar.");
42 }
43
44 const dlRes = await axios.get(res.data.variants.transparent, {
45 responseType: "arraybuffer",
46 headers: {
47 referer: "https://bgclear.ai/",
48 "user-agent": UA,
49 },
50 timeout: 30000,
51 });
52
53 return {
54 success: true,
55 buffer: Buffer.from(dlRes.data),
56 contentType: "image/png",
57 model: res.data.models_used?.[0] || "InSPyReNet AI",
58 engine: "BGClear (InSPyReNet)",
59 };
60}
61
62async function yunusekRemoveBg(input, highRes = false) {
63 const buf = await resolveImageBuffer(input);
64 const form = new FormData();
65 form.append("image", buf, {
66 filename: "image.png",
67 contentType: "image/png",
68 });
69 form.append("high_res", highRes ? "true" : "false");
70
71 const res = await axios.post("https://api.yunusek.org/api/remove-background", form, {
72 headers: {
73 ...form.getHeaders(),
74 "User-Agent": "okhttp/4.9.2",
75 "Accept-Encoding": "gzip",
76 },
77 responseType: "arraybuffer",
78 timeout: 45000,
79 });
80
81 return {
82 success: true,
83 buffer: Buffer.from(res.data),
84 contentType: res.headers["content-type"] || "image/png",
85 model: "YunusEk AI",
86 engine: "YunusEk Core",
87 };
88}
89
90async function removebg(options = {}) {
91 const {
92 image,
93 mode = "removebg",
94 scale = "2",
95 highRes = false,
96 } = options;
97
98 if (!image) throw new Error('Parameter "image" is required');
99
100 const activeMode = (mode || "removebg").toLowerCase();
101 const buf = await resolveImageBuffer(image);
102
103 if (activeMode === "removebg") {
104 try {
105 const res1 = await bgclearRemoveBg(buf);
106 if (res1.buffer && res1.buffer.length > 0) return res1;
107 } catch (err1) {
108 console.warn("[RemoveBG] BGClear failed, fallback to YunusEk:", err1.message);
109 }
110
111 try {
112 const res2 = await yunusekRemoveBg(buf, highRes);
113 if (res2.buffer && res2.buffer.length > 0) return res2;
114 } catch (err2) {
115 console.error("[RemoveBG] YunusEk fallback error:", err2.message);
116 throw new Error(`Semua engine RemoveBG gagal: ${err2.message}`);
117 }
118 }
119
120 if (activeMode === "upscale") {
121 const form = new FormData();
122 form.append("image", buf, { filename: "image.png", contentType: "image/png" });
123 form.append("scale", String(scale));
124
125 const res = await axios.post("https://api.yunusek.org/api/upscale", form, {
126 headers: form.getHeaders(),
127 responseType: "arraybuffer",
128 });
129
130 return {
131 success: true,
132 buffer: Buffer.from(res.data),
133 contentType: res.headers["content-type"] || "image/png",
134 engine: "YunusEk Upscale",
135 };
136 }
137
138 throw new Error('Invalid mode (use "removebg" or "upscale")');
139}
140
141if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
142 const __exports = { resolveImageBuffer: resolveImageBuffer, bgclearRemoveBg: bgclearRemoveBg, yunusekRemoveBg: yunusekRemoveBg, removebg: removebg, default: removebg }
143 const __fns = Object.fromEntries(Object.entries(__exports).filter(([, v]) => typeof v === 'function'))
144 const __names = Object.keys(__fns)
145 if (__names.length === 0) {
146 console.log('Tidak ada fungsi yang bisa di-demo. Import modul ini dari kode lain.')
147 } else {
148 const __search = __names.find((n) => /search|cari/i.test(n))
149 const __name = __search || __names[0]
150 const __fn = __fns[__name]
151 const __isClass = /^class\s/.test(Function.prototype.toString.call(__fn))
152 const __defaultArgs = (() => {
153 const n = __name.toLowerCase()
154 if (/emoji/.test(n)) return [{ emoji: '๐Ÿ˜€๐Ÿ˜ƒ' }]
155 if (/textpro|generate.*text|effect/.test(n)) return ['neon', 'Hello']
156 if (/image|wallpaper|search|query|anime|movie|manga|news|lyrics|wiki|quote|stalk|detail/.test(n)) return ['naruto']
157 if (/download|youtube|video|audio|music|spotify|tiktok|instagram|facebook|twitter|reels|terabox|media/.test(n)) return ['https://www.youtube.com/watch?v=dQw4w9WgXcQ']
158 if (/dork/.test(n)) return ['example.com', 'documents']
159 if (/tts|speech|prompt|chat|ask|translate/.test(n)) return ['Hello world']
160 if (/parse|format|normalize|list|features/.test(n)) return []
161 return ['test']
162 })()
163 let __args = __defaultArgs
164 if (process.argv.length > 2) __args = process.argv.slice(2).map((a) => { try { return JSON.parse(a) } catch { return a } })
165 if (__args.length === 0 && !__search && !__isClass && __fn.length > 0) {
166 console.log('Fungsi: ' + __names.join(', '))
167 console.log('Contoh: node ' + "removebg.js" + ' ' + __name + ' <arg>')
168 } else {
169 ;(async () => {
170 try {
171 const r = __isClass ? new __fn(...__args) : await __fn(...__args)
172 console.log(JSON.stringify(r, null, 2))
173 } catch (e) {
174 console.error('Error: ' + (e && e.message ? e.message : e))
175 process.exitCode = 1
176 }
177 })()
178 }
179 }
180}
181
Discussion & Comments0

No comments yet โ€” be the first to leave feedback or start a code discussion.

Sign in with your GitHub account to write comments and join the discussion.