import fetch from "node-fetch"; import express from 'express'; import { Readable } from "stream"; import sharp from "sharp"; import * as config from '../config.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", 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 };