| const axios = require('axios'); |
| const sharp = require('sharp'); |
| const fs = require('fs'); |
| const path = require('path'); |
|
|
| const handler = async (req, res) => { |
| try { |
| const { text } = req.query; |
|
|
| if (!text) { |
| return res.status(400).json({ |
| success: false, |
| error: 'Missing required parameter: text' |
| }); |
| } |
|
|
| const targetUrl = `https://fast-flux-demo.replicate.workers.dev/api/generate-image?text=${encodeURIComponent(text)}`; |
| const proxyUrl = `https://proxy-sigma-roan.vercel.app/api/proxy?url=${encodeURIComponent(targetUrl)}`; |
| |
| const result = await axios.get(proxyUrl, { |
| responseType: 'arraybuffer' |
| }); |
|
|
| const buffer = Buffer.from(result.data); |
| |
| const jpegBuffer = await sharp(buffer) |
| .jpeg({ quality: 90 }) |
| .toBuffer(); |
| |
| const randomName = `flux-${Math.random().toString(36).substring(2, 15)}.jpg`; |
| const tmpPath = path.join('/tmp', randomName); |
| |
| fs.writeFileSync(tmpPath, jpegBuffer); |
| |
| setTimeout(() => { |
| if (fs.existsSync(tmpPath)) { |
| fs.unlinkSync(tmpPath); |
| } |
| }, 5 * 60 * 1000); |
| |
| const host = req.headers.host || req.get('host'); |
| const protocol = req.headers['x-forwarded-proto'] || req.protocol || 'https'; |
| const imageUrl = `${protocol}://${host}/tmp/${randomName}`; |
| |
| res.json({ |
| author: "Herza", |
| success: true, |
| data: { |
| img_url: imageUrl |
| } |
| }); |
|
|
| } catch (error) { |
| res.status(500).json({ |
| success: false, |
| error: error.message |
| }); |
| } |
| }; |
|
|
| module.exports = { |
| name: 'Flux AIv2', |
| description: 'Generate image using Flux AI', |
| type: 'GET', |
| routes: ['api/AI/flux2'], |
| tags: ['ai', 'Flux', 'Image Generator'], |
| main: ['AI'], |
| parameters: ['text', 'key'], |
| enabled: true, |
| limit: 2, |
| handler |
| }; |