save changes

This commit is contained in:
2025-08-16 12:04:20 +02:00
parent 1367f4571a
commit 13c878b627

View File

@ -4,15 +4,21 @@ import { generateImage } from './lib/image-generator';
import { generateVideo } from './lib/video-generator'; import { generateVideo } from './lib/video-generator';
import { logger } from './lib/logger'; import { logger } from './lib/logger';
(async () => { async function generateVideoFromKeyword(keyword: string) {
const keyword = 'cyberpunk city';
const numberOfPages = 1; const numberOfPages = 1;
const imagePaths = await downloadPinterestImages(keyword, numberOfPages); const imagePaths = await downloadPinterestImages(keyword, numberOfPages);
logger.info('Downloaded images:', imagePaths); logger.debug('Downloaded images:', imagePaths);
if (imagePaths.length === 0) {
logger.warn('No images downloaded, cannot proceed.');
return;
}
const randomImagePath = imagePaths[Math.floor(Math.random() * imagePaths.length)];
logger.debug(`Randomly selected image: ${randomImagePath}`);
for (const imagePath of imagePaths) {
try { try {
const llmResponseJSON = await describeImage(imagePath, const imagePromptResponse = await describeImage(randomImagePath,
`Describe this image as a prompt for an image generation model. `Describe this image as a prompt for an image generation model.
Prompt should be in 200 words. Prompt should be in 200 words.
Output should be in this format Output should be in this format
@ -22,13 +28,13 @@ import { logger } from './lib/logger';
} }
--- ---
`); `);
const prompt = llmResponseJSON.prompt; const imagePrompt = imagePromptResponse.prompt;
logger.info(`Description for ${imagePath}:`, prompt); logger.debug(`Description for ${randomImagePath}:`, imagePrompt);
const timestamp = new Date().getTime(); const timestamp = new Date().getTime();
const imageFileName = `${keyword.replace(/\s/g, '_')}_${timestamp}.png`; const imageFileName = `${keyword.replace(/\s/g, '_')}_${timestamp}.png`;
const generatedImagePath = await generateImage(prompt, imageFileName); const generatedImagePath = await generateImage(imagePrompt, imageFileName);
logger.info(`Generated new image from prompt, saved to: ${generatedImagePath}`); logger.debug(`Generated new image from prompt, saved to: ${generatedImagePath}`);
const videoPromptResponse = await describeImage(generatedImagePath, const videoPromptResponse = await describeImage(generatedImagePath,
`Generate a prompt for an 8-second video based on the provided image. `Generate a prompt for an 8-second video based on the provided image.
@ -41,13 +47,43 @@ import { logger } from './lib/logger';
--- ---
`); `);
const videoPrompt = videoPromptResponse.prompt; const videoPrompt = videoPromptResponse.prompt;
logger.info(`Generated video prompt: ${videoPrompt}`); logger.debug(`Generated video prompt: ${videoPrompt}`);
const videoFileName = `${keyword.replace(/\s/g, '_')}_${timestamp}.mp4`; const videoFileName = `${keyword.replace(/\s/g, '_')}_${timestamp}.mp4`;
const generatedVideoPath = await generateVideo(videoPrompt, generatedImagePath, videoFileName); const generatedVideoPath = await generateVideo(videoPrompt, generatedImagePath, videoFileName);
logger.info(`Generated video from prompt, saved to: ${generatedVideoPath}`); logger.debug(`Generated video from prompt, saved to: ${generatedVideoPath}`);
} catch (error) { } catch (error) {
logger.error(`Failed to process ${imagePath}:`, error); logger.error(`Failed to process ${randomImagePath}:`, error);
} }
} }
(async () => {
while (1) {
const keywords = [
"beautiful woman portrait",
"handsome man candid",
"interesting street photography",
"stunning landscape",
"vibrant city nightlife",
"elegant fashion model",
"captivating eyes",
"fantasy landscape",
"RPG character art",
"high fashion model",
"city nightscape",
"fireworks display",
"nebula space art",
"3D abstract render"
];
for (const keyword of keywords) {
const startTime = Date.now();
logger.info(`--- Starting process for keyword: ${keyword} ---`);
await generateVideoFromKeyword(keyword);
const endTime = Date.now();
const durationInSeconds = (endTime - startTime) / 1000;
logger.info(`--- Finished process for keyword: ${keyword} in ${durationInSeconds.toFixed(2)} seconds ---`);
}
}
})(); })();