From 9ad4e7972b553bf29c061847099faa170d3ffa5c Mon Sep 17 00:00:00 2001 From: Ken Yasue Date: Mon, 13 Oct 2025 17:09:58 +0200 Subject: [PATCH] continuouly image modification --- src/product/photo_download.ts | 4 +-- src/tools/embed_prompt_to_png.ts | 54 ++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 src/tools/embed_prompt_to_png.ts diff --git a/src/product/photo_download.ts b/src/product/photo_download.ts index e147d6f..238a391 100644 --- a/src/product/photo_download.ts +++ b/src/product/photo_download.ts @@ -35,7 +35,7 @@ function extractJsonFromText(text: string): any | null { logger.info(`Starting photo download process with prompt: "${HARDCODED_USER_PROMPT}"`); // 1. Extract keywords from the hardcoded prompt - const keywords = ["food", "perfume", "accesory", "jewelry", "shoes", "bags", "watches", "sunglasses", "hats", "scarves", "belts", "wallets", "gloves", "ties", "cufflinks", "brooches", "necklaces", "bracelets", "earrings"]; + const keywords = ["fullbody portrait girl", "fullbody portrait 18y girl", "fullbody portrait cute girl", "fullbody portrait blond girl", "fullbody portrait 20y girl"]; if (!keywords || keywords.length === 0) { logger.error("Could not extract keywords from prompt. Exiting."); @@ -48,7 +48,7 @@ function extractJsonFromText(text: string): any | null { for (const keyword of keywords) { try { logger.info(`Downloading photos for keyword: "${keyword}"`); - const downloadedPaths = await downloadImagesFromPinterestSearch(`${keyword} product photo`, PHOTOS_PER_KEYWORD); + const downloadedPaths = await downloadImagesFromPinterestSearch(`${keyword}`, PHOTOS_PER_KEYWORD); if (downloadedPaths.length > 0) { logger.info(`Successfully downloaded ${downloadedPaths.length} images for "${keyword}"`); totalDownloads += downloadedPaths.length; diff --git a/src/tools/embed_prompt_to_png.ts b/src/tools/embed_prompt_to_png.ts new file mode 100644 index 0000000..51f046d --- /dev/null +++ b/src/tools/embed_prompt_to_png.ts @@ -0,0 +1,54 @@ +import * as fs from 'fs'; +import * as path from 'path'; +import { callLMStudioAPIWithFile } from '../lib/lmstudio'; +import { embedJsonToPng } from '../lib/util'; + +const imageDir = 'C:\\Users\\fm201\\Desktop\\vton\\bags'; + +async function processImages() { + try { + const files = fs.readdirSync(imageDir); + const imageFiles = files.filter(file => /\.(png)$/i.test(file)); + + for (const imageFile of imageFiles) { + const imagePath = path.join(imageDir, imageFile); + console.log(`Processing ${imagePath}...`); + + const prompt = ` + Based on the handbag in the image, generate 10 outfit prompts that would complement it. + Each prompt should be a short, descriptive sentence of around 20 words. + Return the result in the following JSON format: + {"result": ["outfit prompt 1", "outfit prompt 2", ...]} + `; + + try { + const response = await callLMStudioAPIWithFile(imagePath, prompt); + let outfitPrompts; + + if (typeof response === 'string') { + try { + outfitPrompts = JSON.parse(response); + } catch (e) { + console.error(`Failed to parse JSON string for ${imageFile}:`, response); + continue; + } + } else { + outfitPrompts = response; + } + + if (outfitPrompts && outfitPrompts.result) { + await embedJsonToPng(imagePath, outfitPrompts); + console.log(`Successfully embedded prompts into ${imageFile}`); + } else { + console.error(`Invalid JSON response for ${imageFile}:`, response); + } + } catch (error) { + console.error(`Failed to process ${imageFile}:`, error); + } + } + } catch (error) { + console.error('Error reading image directory:', error); + } +} + +processImages();