magicstudio.mjs

javascriptCreated 30 Nov 2025, 03:53171 views
Aiart & background remover, Wrapper from magicstudio.com.
#ai#txt2img#image
javascript
/***
  @ Base: https://magicstudio.com/
  @ Author: Shannz
  @ Desc: Aiart & background remover, Wrapper from magicstudio.com.
***/

import axios from 'axios';
import FormData from 'form-data';
import { v4 as uuidv4 } from 'uuid';
import fs from 'fs';
import path from 'path';
import { uploadFile } from 'cloudsky-storage';

function generateClientId(length = 40) {
  const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  let id = '';
  for (let i = 0; i < length; i++) {
    id += chars.charAt(Math.floor(Math.random() * chars.length));
  }
  return id;
}

function getMimeType(filePath) {
  const ext = path.extname(filePath).toLowerCase();
  if (ext === '.png') return 'image/png';
  if (ext === '.webp') return 'image/webp';
  return 'image/jpeg';
}

export const magicstudio = {
  aiart: async (prompt) => {
    const anonymousUserId = uuidv4();
    const requestTimestamp = (Date.now() / 1000).toFixed(3);
    const clientId = generateClientId();

    const formData = new FormData();
    formData.append('prompt', prompt);
    formData.append('output_format', 'bytes');
    formData.append('user_profile_id', 'null');
    formData.append('anonymous_user_id', anonymousUserId);
    formData.append('request_timestamp', requestTimestamp);
    formData.append('user_is_subscribed', 'false');
    formData.append('client_id', clientId);

    const config = {
      method: 'POST',
      url: 'https://ai-api.magicstudio.com/api/ai-art-generator',
      headers: {
        ...formData.getHeaders(),
        'User-Agent': 'ScRaPe/9.9 (KaliLinux; Nusantara Os; My/Shannz)',
        'Accept': 'application/json, text/plain, */*',
        'origin': 'https://magicstudio.com',
        'referer': 'https://magicstudio.com/ai-art-generator/'
      },
      responseType: 'arraybuffer',
      data: formData
    };

    try {
      const response = await axios.request(config);
      const imageBuffer = Buffer.from(response.data);
      const fileName = `aiart-${Date.now()}.jpg`;
      const upload = await uploadFile(imageBuffer, fileName);

      if (upload.success) {
        return upload.data.url;
      } else {
        throw new Error(upload.message || "Upload ke Cloudsky gagal");
      }
    } catch (error) {
      console.error('Error di aiart:', error.message || error);
      return 'Gagal membuat atau mengupload gambar.';
    }
  },

  removebg: async (filePath) => {
    try {
      if (!fs.existsSync(filePath)) {
        throw new Error(`File tidak ditemukan: ${filePath}`);
      }
      const imageBuffer = fs.readFileSync(filePath);
      const mimeType = getMimeType(filePath);
      const base64Data = imageBuffer.toString('base64');
      const dataUri = `data:${mimeType};base64,${base64Data}`;

      const anonymousUserId = uuidv4();
      const requestTimestamp = (Date.now() / 1000).toFixed(3);
      const clientId = generateClientId();

      const formData = new FormData();
      formData.append('image', dataUri);
      formData.append('output_type', 'image');
      formData.append('output_format', 'url');
      formData.append('auto_delete_data', 'true');
      formData.append('user_profile_id', 'null');
      formData.append('anonymous_user_id', anonymousUserId);
      formData.append('request_timestamp', requestTimestamp);
      formData.append('user_is_subscribed', 'false');
      formData.append('client_id', clientId);

      const config = {
        method: 'POST',
        url: 'https://ai-api.magicstudio.com/api/remove-background',
        headers: {
          ...formData.getHeaders(),
          'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Mobile Safari/537.36',
          'Accept': 'application/json, text/plain, */*',
          'origin': 'https://magicstudio.com',
          'referer': 'https://magicstudio.com/background-remover/editor/'
        },
        data: formData
      };

      const response = await axios.request(config);
      
      if (response.data && response.data.status === 'success' && response.data.results) {
        return response.data.results[0].image;
      } else {
        throw new Error("Format respons API tidak sesuai atau gagal menghapus background.");
      }

    } catch (error) {
      console.error('Error di removebg:', error.response?.data || error.message);
      return 'Gagal menghapus background gambar.';
    }
  }
};

/*
(async () => {
  console.log("⏳ Menggambar AI Art...");
  const artUrl = await magicstudio.aiart('beautiful anime girl');
  console.log("✅ AI Art URL:", artUrl);

  console.log("⏳ Menghapus Background...");
  const bgUrl = await magicstudio.removebg('./u.jpg');
  console.log("✅ Remove BG URL:", bgUrl);
})();
*/