← back to browse
goat command

edit

Generate or edit images using text prompts

0
views
0
likes
0
installs

Aliases: nanobanana, gptimage

raw source
const axios = require("axios");
const fs = require("fs");
const path = require("path");

// Renz API JSON
const noobcore = "https://raw.githubusercontent.com/noobcore404/NC-STORE/main/NCApiUrl.json";

async function getRenzApi() {
  const res = await axios.get(noobcore, { timeout: 10000 });
  if (!res.data?.renz) throw new Error("Renz API not found in JSON");
  return res.data.renz;
}

module.exports = {
  config: {
    name: "edit",
    aliases: ["nanobanana", "gptimage"],
    version: "1.0",
    author: "rX x AKASH",
    countDown: 5,
    role: 0,
    shortDescription: "Generate or edit images using text prompts",
    category: "image",
    guide: "{pn} <prompt> | Reply to an image with your prompt"
  },

  onStart: async function ({ api, event, args }) {
    const { threadID, messageID, messageReply } = event;
    const prompt = args.join(" ").trim();

    if (!prompt) {
      return api.sendMessage(
        "❌ Pʟᴇᴀsᴇ ᴘʀᴏᴠɪᴅᴇ ᴀ ᴘʀᴏᴍᴘᴛ.\n\nExamples:\n!gptgen a cyberpunk city\n!gptgen make me anime (reply to an image)",
        threadID,
        messageID
      );
    }

    const loadingMsg = await api.sendMessage("⏳ Pʀᴏᴄᴇssɪɴɢ ʏᴏᴜʀ ɪᴍᴀɢᴇ...", threadID);

    const imgPath = path.join(__dirname, "cache", `${Date.now()}_gptgen.png`);

    try {
      const BASE_URL = await getRenzApi();
      let apiURL = `${BASE_URL}/api/gptimage?prompt=${encodeURIComponent(prompt)}`;

      if (messageReply?.attachments?.[0]?.type === "photo") {
        const repliedImage = messageReply.attachments[0];
        apiURL += `&ref=${encodeURIComponent(repliedImage.url)}`;
        if (repliedImage.width && repliedImage.height) {
          apiURL += `&width=${repliedImage.width}&height=${repliedImage.height}`;
        }
      } else {
        apiURL += `&width=512&height=512`;
      }

      const res = await axios.get(apiURL, {
        responseType: "arraybuffer",
        timeout: 180000
      });

      fs.mkdirSync(path.dirname(imgPath), { recursive: true });
      fs.writeFileSync(imgPath, res.data);

      await api.unsendMessage(loadingMsg.messageID);

      await api.sendMessage(
        {
          body: messageReply?.attachments?.[0]
            ? `🖌 Image edited successfully.\nPrompt: ${prompt}`
            : `🖼 Image generated successfully.\nPrompt: ${prompt}`,
          attachment: fs.createReadStream(imgPath)
        },
        threadID,
        () => fs.unlinkSync(imgPath)
      );

    } catch (err) {
      console.error("GPTGEN Error:", err?.response?.data || err.message);
      await api.unsendMessage(loadingMsg.messageID);
      api.sendMessage("❌ Fᴀɪʟᴇᴅ ᴛᴏ ᴘʀᴏᴄᴇss ɪᴍᴀɢᴇ. Pʟᴇᴀsᴇ ᴛʀʏ ᴀɢᴀɪɴ ʟᴀᴛᴇʀ.", threadID);
    }
  }
};

View raw file