← back to browse
goat command

rbg

Remove background from image or video

0
views
0
likes
0
installs

Aliases: removebg, rmvbg

raw source
const axios = require("axios");
const fs = require("fs-extra");
const path = require("path");
const FormData = require("form-data");

module.exports = {
 config: {
 name: "rbg",
 aliases: ["removebg", "rmvbg"],
 version: "2.1",
 author: "Toshiro Editz",
 countDown: 5,
 role: 0,
 shortDescription: {
 en: "Remove background from image or video"
 },
 longDescription: {
 en: "Removes background from image using proxy and video using Unscreen"
 },
 category: "utility",
 guide: {
 en: "+rbg → image bg remove\n+rbg vid → video bg remove"
 }
 },

 onStart: async function ({ message, api, args, event }) {
 const isVideo = args[0] === "vid";
 const unscreenApiKey = "DnFcWMu9WavCVoNgg7BQDWqc";
 const proxyHost = "xyz"; // Replace if different
 let url = "";

 if (event.messageReply?.attachments?.[0]?.url) {
 url = event.messageReply.attachments[0].url;
 } else if (args[1]?.startsWith("http")) {
 url = args[1];
 } else {
 return message.reply(`❌ Please reply to a ${isVideo ? "video" : "image"} or provide a valid link.`);
 }

 // 🌀 React & Notify
 api.setMessageReaction("⏳", event.messageID, () => {}, true);
 message.reply(`🎬 Removing ${isVideo ? "video" : "image"} background, please wait...`, async (err, info) => {
 try {
 if (isVideo) {
 // --- 🔹 Unscreen Video API flow ---
 const form = new FormData();
 form.append("video_url", url);

 const uploadRes = await axios.post("https://api.unscreen.com/v1.0/videos", form, {
 headers: {
 ...form.getHeaders(),
 "X-Api-Key": unscreenApiKey
 }
 });

 const videoId = uploadRes.data.id;
 const pollingUrl = `https://api.unscreen.com/v1.0/videos/${videoId}`;
 let downloadUrl = null;

 // ⏳ Polling until complete
 for (let i = 0; i < 10; i++) {
 const poll = await axios.get(pollingUrl, {
 headers: { "X-Api-Key": unscreenApiKey }
 });

 if (poll.data.status === "done") {
 downloadUrl = poll.data.video.url;
 break;
 }
 await new Promise(r => setTimeout(r, 3000)); // wait 3s
 }

 if (!downloadUrl) throw new Error("Unscreen failed to complete in time.");

 const filePath = path.join(__dirname, "cache", `${videoId}.mp4`);
 const file = await axios.get(downloadUrl, { responseType: "arraybuffer" });
 fs.writeFileSync(filePath, file.data);

 await message.reply({
 body: "✅ Video background removed!\nAPI Owner: Chitron Bhattacharjee",
 attachment: fs.createReadStream(filePath)
 });

 fs.unlinkSync(filePath);
 } else {
 // --- 🔹 Proxy Image API ---
 const encoded = encodeURIComponent(url);
 const proxyUrl = `https://smfahim.${proxyHost}/rbg?url=${encoded}`;
 const imageStream = await global.utils.getStreamFromURL(proxyUrl);

 await message.reply({
 body: "✅ Image background removed!\nAPI Owner: Chitron Bhattacharjee",
 attachment: imageStream
 });
 }

 if (info?.messageID) message.unsend(info.messageID);
 api.setMessageReaction("✅", event.messageID, () => {}, true);
 } catch (e) {
 console.error("❌ RBG ERROR:", e?.response?.data || e.message || e);
 api.setMessageReaction("❌", event.messageID, () => {}, true);
 message.reply(`❌ Failed to remove background.\nReason: ${e.message || "Unknown error"}`);
 }
 });
 }
};

View raw file