-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrender.js
More file actions
132 lines (123 loc) · 4.81 KB
/
render.js
File metadata and controls
132 lines (123 loc) · 4.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// render.js main file
require("dotenv").config();
const path = require("path");
const express = require("express");
const app = express();
const PORT = process.env.PORT || 3000;
const generate = require("./components/scriptGenerator.js");
const imgGen = require("./components/imageGen.js");
const generateAudio = require("./components/scriptToVoice.js");
const generateCaption = require("./components/speechToCaption.js");
const generateVideo = require("./components/generateVideo.js");
const uploadVideoToYoutube = require("./components/uploadVideo.js");
const deleteVideoData = require("./components/deleteVideoData.js");
const refreshAccessToken = require("./components/refreshAccessToken.js");
const cors = require("cors");
const nasaApodFetcher = require("./components/nasaApodFetcher.js");
const emailSender = require("./components/emailSender.js");
const downloadVideo = require("./components/downloadVideo.js");
app.use(
cors({
origin: "*", // Allow all origins
}),
);
app.use(express.json());
// generate acess token using the refresh token
app.get("/", async (req, res) => {
res.sendFile(path.join(__dirname, "public/pages", "home.html"));
});
app.get("/privacy", (req, res) => {
res.sendFile(path.join(__dirname, "public/pages", "privacy.html"));
});
app.get("/terms", (req, res) => {
res.sendFile(path.join(__dirname, "public/pages", "terms.html"));
});
//function for giving random voice models
const getRandomVoiceModel = () => {
const voiceModels = ["Matthew", "Justin", "Kimberly", "Salli", "Joanna"];
const randomIndex = Math.floor(Math.random() * voiceModels.length);
return voiceModels[randomIndex];
};
app.get("/generate", async (req, res) => {
try {
const response = await refreshAccessToken();
if (response) {
console.log("Access token refreshed successfully");
const apodData = await nasaApodFetcher();
console.log(apodData);
const script = await generate(apodData);
if (script) {
console.log(script);
const imgs = await imgGen(script);
if (imgs.length == script.length) {
// setTimeout(async () => {
const audio = await generateAudio({
script: script,
voice: getRandomVoiceModel(),
});
if (audio) {
// setTimeout(async() => {
console.log(audio);
console.log("Audio generated successfully");
const captionsResponse = await generateCaption();
if (captionsResponse) {
console.log(captionsResponse);
const videoResponse = await generateVideo({
images: imgs,
audioSrc: audio,
captions: captionsResponse,
});
if (videoResponse) {
console.log("Video generated successfully", videoResponse);
await downloadVideo(videoResponse)
.then(async () => {
console.log("Video downloaded successfully");
await uploadVideoToYoutube();
})
.catch((error) => {
console.error("Error downloading video:", error);
});
} else {
console.log("Video generation failed");
await emailSender("Video generation failed");
await deleteVideoData();
}
} else {
console.log("Caption generation failed");
console.log(captionsResponse);
await emailSender("Caption generation failed");
await deleteVideoData();
}
// },5000)
} else {
console.log("Audio generation failed");
console.log(response);
await emailSender("Audio generation failed");
await deleteVideoData();
}
// }, 5000);
} else {
console.log("Image generation failed");
await emailSender("Image generation failed");
await deleteVideoData();
res.status(500).json({ message: "Image generation failed" });
}
res.status(200).json({ message: "Script generated successfully" });
} else {
await emailSender("Script generation failed");
res.status(500).json({ message: "Script generation failed" });
}
} else {
await emailSender("Access token refresh failed");
res.status(500).json({ message: "Access token refresh failed" });
}
} catch (error) {
console.error("Error generating video:", error);
await emailSender(error);
res.status(500).json({ message: "Error generating video" });
}
});
// Start Server
app.listen(PORT, () => {
console.log(`Server running on http://localhost:${PORT}`);
});