File size: 2,579 Bytes
77c917d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d793aae
77c917d
 
 
 
 
 
 
 
 
 
d793aae
77c917d
d793aae
77c917d
 
d793aae
77c917d
 
 
 
 
 
 
 
 
 
d793aae
 
 
 
 
 
 
 
77c917d
 
 
 
d793aae
 
 
 
 
77c917d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d793aae
77c917d
d793aae
77c917d
 
d793aae
77c917d
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
const axios = require('axios');
const upload = require('../lib/uploadImage');

async function faceSwap(img_url1, img_url2) {
  try {
    const response1 = await axios.get(img_url1, { responseType: 'arraybuffer' });
    const base64_1 = Buffer.from(response1.data).toString('base64');
    
    const response2 = await axios.get(img_url2, { responseType: 'arraybuffer' });
    const base64_2 = Buffer.from(response2.data).toString('base64');

    const swapResponse = await axios.post('https://api.faceswapper.ai/swap', {
      target: base64_1,
      source: base64_2,
      type: 'invisible',
      id: 'faceswapper'
    }, {
      headers: {
        'Accept': 'application/json, text/plain, */*',
        'Content-Type': 'application/json',
        'type': 'rapid'
      }
    });

    const base64Data = swapResponse.data.result.replace(/^data:image\/\w+;base64,/, '');
    const buffer = Buffer.from(base64Data, 'base64');
    
    const imageUrl = await upload(buffer);

    return {
      success: true,
      elapsedTime: swapResponse.data.elapsedTime,
      result: swapResponse.data.result,
      url: imageUrl
    };

  } catch (error) {
    throw error;
  }
}

const handler = async (req, res) => {
    try {
        const { img, img2, key } = req.query;

        if (!img) {
            return res.status(400).json({
                success: false,
                error: 'Missing required parameter: img'
            });
        }

        if (!img2) {
            return res.status(400).json({
                success: false,
                error: 'Missing required parameter: img2'
            });
        }

        if (!key) {
            return res.status(400).json({
                success: false,
                error: 'Missing required parameter: key'
            });
        }

        const result = await faceSwap(img, img2);

        return res.json({
            author: "Herza",
            success: true,
            data: {
                elapsedTime: result.elapsedTime,
                result: result.result,
                url: result.url
            }
        });

    } catch (error) {
        res.status(500).json({
            success: false,
            error: error.message,
            timestamp: new Date().toISOString()
        });
    }
};

module.exports = {
    name: 'Face Swap',
    description: 'Swap faces between two images using AI',
    type: 'GET',
    routes: ['api/AI/faceswap'],
    tags: ['AI', 'tools'],
    parameters: ['img', 'img2', 'key'],
    limit: 3,
    enabled: true,
    main: ['AI', 'tools'],
    handler
};