Spaces:
Sleeping
Sleeping
File size: 10,694 Bytes
64fa001 | 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 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 |
const fs = require('fs');
const path = require('path');
// Load .env manually since dotenv might not be installed
try {
const envPath = path.resolve(__dirname, '../.env');
if (fs.existsSync(envPath)) {
const envConfig = fs.readFileSync(envPath, 'utf8');
envConfig.split('\n').forEach(line => {
line = line.trim();
if (!line || line.startsWith('#')) return;
const [key, ...valueParts] = line.split('=');
if (key && valueParts.length > 0) {
let value = valueParts.join('=').trim();
if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
value = value.slice(1, -1);
}
if (!process.env[key.trim()]) {
process.env[key.trim()] = value;
}
}
});
console.log("Loaded .env file");
}
} catch (e) {
console.warn("Could not load .env file:", e.message);
}
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
// Configuration
const WORKER_URL = process.env.CLOUDFLARE_WORKER_URL || "https://wild-art-dca7.veltrix620.workers.dev"; // Fallback if env not set
const MODELS = ["flux-klein", "flux-klein-4b"];
// 10 Realistic Indian Users
const USERS = [
{ name: "Aarav Patel", email: "aarav.patel@gmail.com", username: "aarav_art" },
{ name: "Diya Sharma", email: "diya.sharma88@outlook.com", username: "diya_creates" },
{ name: "Vihaan Singh", email: "vihaan.singh@yahoo.com", username: "vihaan_visuals" },
{ name: "Ananya Gupta", email: "ananya.g@hotmail.com", username: "art_by_ananya" },
{ name: "Arjun Reddy", email: "arjun.reddy@gmail.com", username: "arjun_pixels" },
{ name: "Zara Khan", email: "zara.khan.design@gmail.com", username: "zara_designs" },
{ name: "Ishaan Kumar", email: "ishaan.k99@outlook.com", username: "ishaan_imagines" },
{ name: "Priya Malhotra", email: "priya.malhotra@yahoo.com", username: "priya_paints" },
{ name: "Rohan Verma", email: "rohan.verma@gmail.com", username: "rohan_renders" },
{ name: "Sanya Kapoor", email: "sanya.kapoor@hotmail.com", username: "sanya_studio" }
];
// 50 Unique Prompts (5 per user)
const PROMPTS = [
// Aarav
"A futuristic cyberpunk city street in Mumbai at night, neon lights reflecting on wet pavement, 8k resolution",
"Portrait of an old Indian wise man with a turban, hyperrealistic, detailed wrinkles, warm lighting",
"A minimalist logo design of a lotus flower, vector art, flat style, orange and white",
"Concept art of a flying car in a retro-futuristic style, chrome finish, sunset background",
"Macro photography of a dew drop on a green leaf, bokeh background, natural lighting",
// Diya
"A watercolor painting of the Taj Mahal at sunrise, soft pastel colors, dreamy atmosphere",
"Digital illustration of a chaotic workspace with multiple screens and coffee cups, lo-fi aesthetic",
"A fantasy landscape with floating islands and waterfalls, vibrant colors, cinematic lighting",
"Character design of a female warrior in ancient armor, holding a glowing sword, dynamic pose",
"Abstract expressionist painting with bold brushstrokes of red and gold, chaotic texture",
// Vihaan
"A close-up of a tiger's eye, intense gaze, highly detailed fur, wildlife photography style",
"A delicious plate of butter chicken with naan, steam rising, food photography, top-down view",
"Architectural render of a modern eco-friendly house in the forest, glass walls, green roof",
"A steampunk robot playing a violin, detailed gears and brass, moody lighting",
"A stylized 3D character of a cute astronaut floating in space, low poly style",
// Ananya
"Pattern design of traditional Indian block print, indigo and white, seamless texture",
"A tranquil zen garden with raked sand and stones, morning mist, peaceful atmosphere",
"Cybernetic implant concept art, detailed metal and skin integration, blue glowing lights",
"A vintage travel poster for Goa, palm trees and beach, retro typography and colors",
"Oil painting of a rainy window looking out at a city skyline, melancholy mood",
// Arjun
"Isometric view of a cozy gaming room, neon accents, detailed props, 3D render",
"A majestic dragon perched on a mountain peak, breathing fire, epic fantasy art",
"Portrait of a woman made entirely of flowers and vines, surrealism style",
"A bustling market in Delhi, colorful spices and fabrics, vibrant energy, street photography",
"A sleek sports car drifting on a race track, motion blur, smoke effects, photorealistic",
// Zara
"Fashion illustration of a modern saree with geometric patterns, high fashion style",
"A glowing magical forest with bioluminescent plants, purple and blue color palette",
"Double exposure portrait of a man and a wolf, black and white photography",
"A tasty burger with melting cheese and fries, advertising photography style",
"Concept art of a space station orbiting a red planet, sci-fi realism",
// Ishaan
"A pixel art scene of a retro arcade, neon signs, 8-bit style",
"A detailed map of a fantasy world, parchment texture, hand-drawn style",
"A spooky haunted house on a hill, thunderstorm background, horror atmosphere",
"Product photography of a luxury perfume bottle, gold accents, elegant lighting",
"A cute anime girl with cat ears holding a bubble tea, pastel colors",
// Priya
"Mandala art with intricate patterns, black ink on white paper, meditative style",
"A majestic lion with a galaxy mane, cosmic colors, digital art",
"A snowy mountain landscape at twilight, cold blue tones, serene mood",
"Character concept of a cyberpunk hacker, neon hair, futuristic clothing",
"A vibrant fruit bowl painting, still life, impressionist style",
// Rohan
"3D text render saying 'WILD ART', metallic texture, glossy finish",
"A surreal landscape with melting clocks, inspired by Dali, dreamlike",
"A detailed sketch of a human skull, anatomical accuracy, charcoal style",
"A cozy library with wall-to-wall books, warm fireplace light, inviting atmosphere",
"A futuristic drone delivering a package, city skyline background, realistic",
// Sanya
"A fashion photoshoot of a model in a desert, flowing red dress, dramatic lighting",
"A cute vector illustration of a corgi dog wearing sunglasses, flat design",
"A post-apocalyptic city overflown with nature, ruins and vines, concept art",
"A close-up of a human eye with a universe reflection, macro photography",
"A traditional Indian wedding procession, colorful attire, festive atmosphere"
];
async function generateImage(prompt, model) {
const workerUrl = WORKER_URL.endsWith("/") ? WORKER_URL.slice(0, -1) : WORKER_URL;
const endpoint = model;
const url = `${workerUrl}/${endpoint}`;
try {
console.log(`Generating: "${prompt.slice(0, 30)}..." with ${model}`);
// Using fetch (requires Node 18+)
const response = await fetch(url, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ prompt, width: 1024, height: 1024, steps: 30 }),
});
if (!response.ok) {
console.error(`Failed to generate: ${response.status} ${response.statusText}`);
return null;
}
const result = await response.json();
if (result.success && result.url) {
return result.url;
} else {
console.error("API returned success:false or no URL");
return null;
}
} catch (error) {
console.error("Generation error:", error.message);
return null;
}
}
async function main() {
console.log("🌱 Starting Data Seeding...");
// 1. Create Users
const createdUsers = [];
for (const userData of USERS) {
try {
// Check if exists
const existing = await prisma.user.findUnique({ where: { email: userData.email } });
if (existing) {
console.log(`User ${userData.name} already exists.`);
createdUsers.push(existing);
} else {
const user = await prisma.user.create({
data: {
name: userData.name,
email: userData.email,
username: userData.username,
credits: 1000, // Give them plenty of credits
image: `https://api.dicebear.com/7.x/avataaars/svg?seed=${userData.username}` // Random avatar
}
});
console.log(`Created user: ${user.name}`);
createdUsers.push(user);
}
} catch (e) {
console.error(`Error creating user ${userData.name}:`, e.message);
}
}
// 2. Generate Images
console.log("\n🎨 Generating 50 Images...");
let promptIndex = 0;
// Distribute 5 images per user
for (const user of createdUsers) {
if (promptIndex >= PROMPTS.length) break;
const userPrompts = PROMPTS.slice(promptIndex, promptIndex + 5);
promptIndex += 5;
console.log(`\nProcessing ${user.name}...`);
for (const prompt of userPrompts) {
const model = MODELS[Math.floor(Math.random() * MODELS.length)]; // Randomly pick model
const imageUrl = await generateImage(prompt, model);
if (imageUrl) {
await prisma.generation.create({
data: {
prompt: prompt,
model: model,
width: 1024,
height: 1024,
imageUrl: imageUrl,
userId: user.id,
isPublic: true,
createdAt: new Date() // Current time
}
});
console.log(`Saved generation for prompt: "${prompt.slice(0, 20)}..."`);
} else {
console.log(`Skipping DB save due to generation failure for: "${prompt.slice(0, 20)}..."`);
}
// Small delay to be nice to the API
await new Promise(r => setTimeout(r, 1000));
}
}
console.log("\n✅ Seeding Complete!");
}
main()
.catch(e => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});
|