ryu-js / plugins /fluxai.js
randydev's picture
Update plugins/fluxai.js
ea07d89 verified
raw
history blame
2.82 kB
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 };