DashX-API / plugins /sora2nowm.js
HerzaJ's picture
Create sora2nowm.js
24275e3 verified
async function videoGenerator(prompt) {
if (!prompt) return { error: "Prompt tidak boleh kosong" };
const videoId = `video_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`;
const apiUrl = "https://veo31.ai/api";
try {
const res = await fetch(`${apiUrl}/generate/stream`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
prompt,
aspectRatio: "9:16",
videoId,
}),
});
const data = await res.json();
if (!data.success) return { status: "failed", error: "Error generating video", detail: data };
await new Promise((r) => setTimeout(r, 120000));
while (true) {
const check = await fetch(`${apiUrl}/webhook?videoId=${videoId}`);
const status = await check.json();
if (status.status === "completed") {
return {
status: "completed",
videoUrl: status.videoUrl,
videoId,
};
} else if (status.status === "failed") {
return {
status: "failed",
error: status.error || "unknown",
};
} else {
await new Promise((r) => setTimeout(r, 60000));
}
}
} catch (err) {
return { status: "error", error: err.message };
}
}
const handler = async (req, res) => {
const startTime = Date.now();
try {
const { prompt, key } = req.query;
if (!prompt) {
return res.status(400).json({
author: 'Herza',
success: false,
msg: 'Missing required parameter: prompt',
usage: '/api/AI/sora2nowm?prompt=your_prompt&key=your_key'
});
}
if (!key) {
return res.status(400).json({
author: 'Herza',
success: false,
msg: 'Missing required parameter: key'
});
}
console.log(`\n${'='.repeat(60)}`);
console.log('NEW REQUEST RECEIVED');
console.log(`Prompt: ${prompt}`);
console.log(`${'='.repeat(60)}\n`);
const result = await videoGenerator(prompt);
const duration = ((Date.now() - startTime) / 1000).toFixed(2);
if (result.status === "completed") {
console.log(`\n${'='.repeat(60)}`);
console.log('REQUEST COMPLETED');
console.log(`Duration: ${duration}s`);
console.log(`${'='.repeat(60)}\n`);
res.json({
author: 'Herza',
success: true,
data: {
model: 'veo31-sora2',
prompt: prompt,
videoUrl: result.videoUrl,
videoId: result.videoId,
processingTime: `${duration}s`
}
});
} else {
throw new Error(result.error || 'Video generation failed');
}
} catch (error) {
console.error('\n❌ ERROR:', error.message);
console.error('Stack:', error.stack);
const duration = ((Date.now() - startTime) / 1000).toFixed(2);
res.status(500).json({
author: 'Herza',
success: false,
msg: error.message || 'Terjadi kesalahan saat generate video.',
processingTime: `${duration}s`,
error: {
code: error.code || 'UNKNOWN',
details: error.response?.data || null
}
});
}
}
module.exports = {
name: 'Sora2 Video Generator No Watermark',
description: 'Generate videos using Sora2 AI model without watermark',
type: 'GET',
routes: ['api/AI/sora2nowm'],
tags: ['AI', 'Sora', 'Video', 'NoWatermark'],
parameters: ['prompt', 'key'],
enabled: true,
main: ['AI'],
limit: 15,
handler
};