Spaces:
Paused
Paused
import fetch from "node-fetch"; | |
import express from 'express'; | |
import { Readable } from "stream"; | |
import sharp from "sharp"; | |
import * as config from '../config.js'; | |
import { authenticateApiKey, apiLimiter } from '../middleware/midware.js'; | |
const FluxRoutes = express.Router(); | |
/** | |
* @param {string} args - The input string | |
*/ | |
async function schellwithflux(args) { | |
const EncodeBaseUrl = "aHR0cHM6Ly9hcGktaW5mZXJlbmNlLmh1Z2dpbmdmYWNlLmNvL21vZGVscy9ibGFjay1mb3Jlc3QtbGFicy9GTFVYLjEtc2NobmVsbA=="; | |
try { | |
const response = await fetch(atob(EncodeBaseUrl), { | |
method: "POST", | |
headers: { | |
"Authorization": `Bearer ${config.HUGGING_TOKEN}`, | |
"Content-Type": "application/json", | |
}, | |
body: JSON.stringify({ inputs: args }), | |
}); | |
if (!response.ok) { | |
console.error(`API Error: ${response.status}`); | |
return null; | |
} | |
return await response.arrayBuffer(); | |
} catch (error) { | |
console.error("Error fetching data:", error.message); | |
return null; | |
} | |
} | |
/** | |
* @swagger | |
* tags: | |
* name: FLUX | |
* description: Flux AI image generation endpoints. | |
*/ | |
/** | |
* @swagger | |
* /api/v1/fluxai-ai: | |
* post: | |
* summary: Generate an image using Flux AI. | |
* tags: [FLUX] | |
* description: This endpoint interacts with Flux AI to generate an image based on the query. | |
* requestBody: | |
* required: true | |
* content: | |
* application/json: | |
* schema: | |
* type: object | |
* properties: | |
* query: | |
* type: string | |
* description: The input query for image generation. | |
* responses: | |
* 200: | |
* description: A successfully processed image. | |
* content: | |
* image/jpeg: | |
* schema: | |
* type: string | |
* format: binary | |
* 400: | |
* description: Missing query parameter. | |
* 500: | |
* description: Internal server error. | |
*/ | |
FluxRoutes.post("/api/v1/fluxai-ai", authenticateApiKey, apiLimiter, async (req, res) => { | |
try { | |
const query = req.body.query; | |
if (!query) { | |
return res.status(400).send("Query parameter is missing"); | |
} | |
const imageBytes = await schellwithflux(query); | |
if (!imageBytes) { | |
return res.status(500).json({ error: "Failed to fetch image bytes" }); | |
} | |
const buffer = Buffer.isBuffer(imageBytes) ? imageBytes : Buffer.from(imageBytes); | |
const processedImage = await sharp(buffer).jpeg().toBuffer(); | |
res.set("Content-Type", "image/jpeg"); | |
Readable.from(processedImage).pipe(res); | |
} catch (error) { | |
console.error("Error processing image:", error.message); | |
res.status(500).json({ error: "Internal server error" }); | |
} | |
}); | |
export { FluxRoutes }; |