| import * as formidable from 'formidable'; |
| import Replicate from 'replicate'; |
|
|
| export const config = { |
| api: { |
| bodyParser: false, |
| }, |
| }; |
|
|
| export default async function handler(req, res) { |
| const form = new formidable.IncomingForm(); |
| |
| form.parse(req, async (err, fields, files) => { |
| if (err) { |
| console.error('Error parsing form data:', err); |
| return res.status(400).json({ error: 'Error parsing form data' }); |
| } |
|
|
| try { |
| const inputData = { |
| prompt: fields.prompt?.toString(), |
| negative_prompt: fields.negative_prompt?.toString(), |
| scheduler: fields.scheduler?.toString(), |
| seed: parseInt(fields.seed?.toString() || "0"), |
| refine: fields.refine?.toString(), |
| refine_steps: parseInt(fields.refine_steps?.toString() || "0") |
| }; |
| |
| const replicate = new Replicate({ |
| auth: process.env.NEXT_PUBLIC_REPLICATE_API_TOKEN, |
| }); |
| |
| const prediction = await replicate.predictions.create({ |
| version: "67ed00e8999fecd32035074fa0f2e9a31ee03b57a8415e6a5e2f93a242ddd8d2", |
| input: inputData, |
| }); |
|
|
| console.log('Prediction created:', prediction); |
|
|
| |
| let isPredictionDone = false; |
| let currentPrediction; |
| while (!isPredictionDone) { |
| console.log('Waiting for prediction to complete...'); |
| await new Promise(resolve => setTimeout(resolve, 2000)); |
|
|
| |
| currentPrediction = await replicate.predictions.get(prediction.id); |
|
|
| if (currentPrediction && currentPrediction.status === 'succeeded') { |
| isPredictionDone = true; |
| console.log('Prediction completed.'); |
| break; |
| } |
| } |
|
|
| console.log('Final Prediction Result:', currentPrediction); |
| return res.status(200).json({ prediction: currentPrediction, videoUrl: currentPrediction.videoUrl }); |
| } catch (error) { |
| console.error('An error occurred:', error); |
| return res.status(500).json({ error: 'Internal Server Error' }); |
| } |
| }); |
| } |
|
|