Spaces:
Running
Running
Update index.html
Browse files- index.html +34 -55
index.html
CHANGED
|
@@ -32,7 +32,7 @@ body {
|
|
| 32 |
.container {
|
| 33 |
background-color: var(--card-bg);
|
| 34 |
width: 100%;
|
| 35 |
-
max-width: 750px;
|
| 36 |
padding: 35px;
|
| 37 |
border-radius: 20px;
|
| 38 |
border: 1px solid #222;
|
|
@@ -58,7 +58,6 @@ p.subtitle {
|
|
| 58 |
letter-spacing: 0.5px;
|
| 59 |
}
|
| 60 |
|
| 61 |
-
/* Стилизация селекторов режимов */
|
| 62 |
.mode-selector {
|
| 63 |
display: grid;
|
| 64 |
grid-template-columns: repeat(3, 1fr);
|
|
@@ -114,12 +113,11 @@ label, .checkbox-label {
|
|
| 114 |
letter-spacing: 0.8px;
|
| 115 |
}
|
| 116 |
|
| 117 |
-
label i {
|
| 118 |
margin-right: 6px;
|
| 119 |
font-size: 0.9em;
|
| 120 |
}
|
| 121 |
|
| 122 |
-
|
| 123 |
select, textarea, input[type="text"] {
|
| 124 |
padding: 12px 14px;
|
| 125 |
border: 1px solid var(--border);
|
|
@@ -203,7 +201,6 @@ select option {
|
|
| 203 |
margin-right: 10px;
|
| 204 |
}
|
| 205 |
|
| 206 |
-
/* Стили для вложенного селектора в детском режиме */
|
| 207 |
.sub-mode-selector {
|
| 208 |
display: flex;
|
| 209 |
justify-content: center;
|
|
@@ -238,8 +235,6 @@ select option {
|
|
| 238 |
display: contents;
|
| 239 |
}
|
| 240 |
|
| 241 |
-
|
| 242 |
-
/* Responsive Design */
|
| 243 |
@media (max-width: 600px) {
|
| 244 |
.form-grid {
|
| 245 |
grid-template-columns: 1fr;
|
|
@@ -254,11 +249,10 @@ select option {
|
|
| 254 |
font-size: 1.8rem;
|
| 255 |
}
|
| 256 |
.mode-selector {
|
| 257 |
-
grid-template-columns: 1fr;
|
| 258 |
gap: 5px;
|
| 259 |
}
|
| 260 |
}
|
| 261 |
-
|
| 262 |
</style>
|
| 263 |
</head>
|
| 264 |
<body>
|
|
@@ -276,9 +270,7 @@ select option {
|
|
| 276 |
<form id="promptForm">
|
| 277 |
<div class="form-grid">
|
| 278 |
|
| 279 |
-
<!-- === MODEL PHOTOGRAPHY MODE === -->
|
| 280 |
<div id="modelMode" class="form-mode">
|
| 281 |
-
<!-- Row 1 -->
|
| 282 |
<div class="form-group">
|
| 283 |
<label for="gender">Пол</label>
|
| 284 |
<select id="gender" onchange="autoAdjustDefaults()">
|
|
@@ -295,7 +287,6 @@ select option {
|
|
| 295 |
<option value="30-40 years old">30-40 лет</option>
|
| 296 |
</select>
|
| 297 |
</div>
|
| 298 |
-
<!-- Row 2 -->
|
| 299 |
<div class="form-group">
|
| 300 |
<label for="nationality">Внешность/Этнос</label>
|
| 301 |
<select id="nationality">
|
|
@@ -315,7 +306,6 @@ select option {
|
|
| 315 |
<option value="Skinny model look">Модельная худоба</option>
|
| 316 |
</select>
|
| 317 |
</div>
|
| 318 |
-
<!-- Row 3 -->
|
| 319 |
<div class="form-group">
|
| 320 |
<label for="hairColor">Цвет волос</label>
|
| 321 |
<select id="hairColor">
|
|
@@ -335,7 +325,6 @@ select option {
|
|
| 335 |
<option value="Fade cut">Фейд (Мужской)</option>
|
| 336 |
</select>
|
| 337 |
</div>
|
| 338 |
-
<!-- Row 4 -->
|
| 339 |
<div class="form-group">
|
| 340 |
<label for="emotion">Эмоция/Выражение лица</label>
|
| 341 |
<select id="emotion">
|
|
@@ -353,10 +342,9 @@ select option {
|
|
| 353 |
<option value="walking towards camera">Идет на камеру</option>
|
| 354 |
<option value="sitting relaxed">Сидит расслабленно</option>
|
| 355 |
<option value="leaning against a wall">Оперевшись о стену</option>
|
| 356 |
-
<option value="dynamic action pose" selected>Динамичная поза</option>
|
| 357 |
</select>
|
| 358 |
</div>
|
| 359 |
-
<!-- Row 5 - COMPOSITION -->
|
| 360 |
<div class="form-group">
|
| 361 |
<label for="shotType">Ракурс/План</label>
|
| 362 |
<select id="shotType">
|
|
@@ -377,7 +365,6 @@ select option {
|
|
| 377 |
<option value="neon lights">Неоновый</option>
|
| 378 |
</select>
|
| 379 |
</div>
|
| 380 |
-
<!-- Row 6 - TECHNICAL STYLE -->
|
| 381 |
<div class="form-group">
|
| 382 |
<label for="style">Эстетика</label>
|
| 383 |
<select id="style">
|
|
@@ -399,8 +386,6 @@ select option {
|
|
| 399 |
<option value="shot on 35mm film, Kodak Portra 400">Пленка Kodak Portra</option>
|
| 400 |
</select>
|
| 401 |
</div>
|
| 402 |
-
|
| 403 |
-
<!-- Row 7 - LOCATION -->
|
| 404 |
<div class="form-group full-width">
|
| 405 |
<label for="location">Локация</label>
|
| 406 |
<select id="location">
|
|
@@ -416,21 +401,18 @@ select option {
|
|
| 416 |
<option value="inside a futuristic, sci-fi corridor with glowing lines">Фантастика (коридор)</option>
|
| 417 |
</select>
|
| 418 |
</div>
|
| 419 |
-
|
| 420 |
<div class="form-group full-width">
|
| 421 |
-
<label for="model_details">Одежда и
|
| 422 |
-
<textarea id="model_details" placeholder="Пример: в черном кожаном плаще
|
| 423 |
</div>
|
| 424 |
</div>
|
| 425 |
|
| 426 |
-
<!-- === CHILDREN PHOTOGRAPHY MODE === -->
|
| 427 |
<div id="childrenMode" class="form-mode">
|
| 428 |
<div class="full-width sub-mode-selector">
|
| 429 |
<button id="newbornBtn" type="button" class="sub-mode-btn" onclick="switchChildrenSubMode('newborn')">Новорождённые</button>
|
| 430 |
<button id="olderChildrenBtn" type="button" class="sub-mode-btn" onclick="switchChildrenSubMode('older')">Дети и подростки</button>
|
| 431 |
</div>
|
| 432 |
|
| 433 |
-
<!-- Newborn Sub-Mode -->
|
| 434 |
<div id="newbornSubMode" class="sub-form-mode">
|
| 435 |
<div class="form-group">
|
| 436 |
<label>Пол</label>
|
|
@@ -471,12 +453,11 @@ select option {
|
|
| 471 |
</select>
|
| 472 |
</div>
|
| 473 |
<div class="form-group full-width">
|
| 474 |
-
<label for="newborn_details">Одежда и
|
| 475 |
-
<textarea id="newborn_details" placeholder="Пример: в
|
| 476 |
</div>
|
| 477 |
</div>
|
| 478 |
|
| 479 |
-
<!-- Older Children Sub-Mode -->
|
| 480 |
<div id="olderChildrenSubMode" class="sub-form-mode">
|
| 481 |
<div class="form-group">
|
| 482 |
<label for="child_gender">Пол</label>
|
|
@@ -524,12 +505,11 @@ select option {
|
|
| 524 |
</select>
|
| 525 |
</div>
|
| 526 |
<div class="form-group full-width">
|
| 527 |
-
<label for="child_details">Одежда и
|
| 528 |
-
<textarea id="child_details" placeholder="Пример:
|
| 529 |
</div>
|
| 530 |
</div>
|
| 531 |
|
| 532 |
-
<!-- Common settings for all children -->
|
| 533 |
<div class="form-group">
|
| 534 |
<label for="child_shotType">Ракурс/План</label>
|
| 535 |
<select id="child_shotType">
|
|
@@ -570,7 +550,6 @@ select option {
|
|
| 570 |
</div>
|
| 571 |
</div>
|
| 572 |
|
| 573 |
-
<!-- === OBJECT PHOTOGRAPHY MODE === -->
|
| 574 |
<div id="objectMode" class="form-mode">
|
| 575 |
<div class="form-group full-width">
|
| 576 |
<label for="object_name">Название/Описание предмета</label>
|
|
@@ -618,7 +597,7 @@ select option {
|
|
| 618 |
</div>
|
| 619 |
<div class="form-group full-width">
|
| 620 |
<label for="object_details">Дополнительные детали окружения</label>
|
| 621 |
-
<textarea id="object_details" placeholder="Пример: капли воды на флаконе,
|
| 622 |
</div>
|
| 623 |
<div class="form-group full-width">
|
| 624 |
<label class="checkbox-label">Креативность</label>
|
|
@@ -663,7 +642,6 @@ function switchChildrenSubMode(subMode) {
|
|
| 663 |
document.getElementById('olderChildrenBtn').classList.toggle('active', subMode === 'older');
|
| 664 |
}
|
| 665 |
|
| 666 |
-
|
| 667 |
function autoAdjustDefaults() {
|
| 668 |
if (currentMode !== 'model') return;
|
| 669 |
const gender = document.getElementById('gender').value;
|
|
@@ -684,14 +662,11 @@ function toggleCreativeMode() {
|
|
| 684 |
document.getElementById('object_background').disabled = isCreative;
|
| 685 |
}
|
| 686 |
|
| 687 |
-
|
| 688 |
async function processAndOpen() {
|
| 689 |
const btn = document.querySelector('.action-btn');
|
| 690 |
const originalText = btn.innerHTML;
|
| 691 |
let fullPrompt = '';
|
| 692 |
|
| 693 |
-
const negative_prompt = "cropped, watermark, text, 3d render, cartoon, anime, plastic look, doll, artificial, blurry, distorted, malformed, ugly, disfigured, amputation, ugly, gross, disgusting, nsfw";
|
| 694 |
-
|
| 695 |
if (currentMode === 'model') {
|
| 696 |
const style = document.getElementById('style').value;
|
| 697 |
const shotType = document.getElementById('shotType').value;
|
|
@@ -703,19 +678,19 @@ async function processAndOpen() {
|
|
| 703 |
const hairstyle = document.getElementById('hairstyle').value;
|
| 704 |
const emotion = document.getElementById('emotion').value;
|
| 705 |
const pose = document.getElementById('pose').value;
|
| 706 |
-
const details = document.getElementById('model_details').value || "
|
| 707 |
const location = document.getElementById('location').value;
|
| 708 |
const light = document.getElementById('light').value;
|
| 709 |
const camera = document.getElementById('camera').value;
|
| 710 |
|
| 711 |
-
const scene = `${details}, ${location}`;
|
| 712 |
-
|
| 713 |
fullPrompt = `style:: ${style}.
|
| 714 |
composition:: ${shotType}.
|
| 715 |
-
subject::
|
| 716 |
-
|
| 717 |
-
|
| 718 |
-
|
|
|
|
|
|
|
| 719 |
|
| 720 |
} else if (currentMode === 'children') {
|
| 721 |
const style = document.getElementById('child_style').value;
|
|
@@ -723,40 +698,43 @@ technical:: professional photography, ${light}, shot on ${camera}, 8k, sharp foc
|
|
| 723 |
const location = document.getElementById('child_location').value;
|
| 724 |
const light = document.getElementById('child_light').value;
|
| 725 |
let subject = '';
|
| 726 |
-
let
|
|
|
|
| 727 |
|
| 728 |
if(currentChildrenSubMode === 'newborn') {
|
| 729 |
const age = document.getElementById('newborn_age').value;
|
| 730 |
const ethnicity = document.getElementById('newborn_ethnicity').value;
|
| 731 |
const emotion = document.getElementById('newborn_emotion').value;
|
| 732 |
const pose = document.getElementById('newborn_pose').value;
|
| 733 |
-
|
| 734 |
subject = `A beautiful, photorealistic portrait of a ${age} ${ethnicity} baby. Face expression is ${emotion}.`;
|
| 735 |
-
|
| 736 |
-
} else {
|
| 737 |
const age = document.getElementById('child_age').value;
|
| 738 |
const gender = document.getElementById('child_gender').value;
|
| 739 |
const ethnicity = document.getElementById('child_ethnicity').value;
|
| 740 |
const emotion = document.getElementById('child_emotion').value;
|
| 741 |
const pose = document.getElementById('child_pose').value;
|
| 742 |
-
|
| 743 |
subject = `A beautiful, photorealistic portrait of a ${age} ${ethnicity} ${gender}. Face expression is ${emotion}.`;
|
| 744 |
-
|
| 745 |
}
|
| 746 |
|
| 747 |
fullPrompt = `style:: ${style}.
|
| 748 |
composition:: ${shotType}.
|
| 749 |
subject:: ${subject}
|
| 750 |
-
|
| 751 |
-
|
|
|
|
|
|
|
| 752 |
|
| 753 |
-
} else {
|
| 754 |
const objectName = document.getElementById('object_name').value || "a product";
|
| 755 |
const objectStyle = document.getElementById('object_style').value;
|
| 756 |
const objectLighting = document.getElementById('object_lighting').value;
|
| 757 |
const objectComposition = document.getElementById('object_composition').value;
|
| 758 |
const isCreative = document.getElementById('creative_mode').checked;
|
| 759 |
-
const objectDetails = document.getElementById('object_details').value || "
|
| 760 |
|
| 761 |
let background = '';
|
| 762 |
if (isCreative) {
|
|
@@ -767,9 +745,10 @@ technical:: professional photography, ${light}, shot on Fujifilm XT4, 56mm F1.2
|
|
| 767 |
|
| 768 |
fullPrompt = `style:: Professional product photography, ${objectStyle}.
|
| 769 |
subject:: A hyper-detailed shot of ${objectName}.
|
| 770 |
-
|
|
|
|
| 771 |
composition:: ${objectComposition}.
|
| 772 |
-
technical:: commercial studio quality, ${objectLighting}, 8k resolution, sharp focus, ultra-realistic, masterpiece.`;
|
| 773 |
}
|
| 774 |
|
| 775 |
const cleanPrompt = fullPrompt.replace(/\s+/g, ' ').replace(/\n/g, ' ').trim();
|
|
|
|
| 32 |
.container {
|
| 33 |
background-color: var(--card-bg);
|
| 34 |
width: 100%;
|
| 35 |
+
max-width: 750px;
|
| 36 |
padding: 35px;
|
| 37 |
border-radius: 20px;
|
| 38 |
border: 1px solid #222;
|
|
|
|
| 58 |
letter-spacing: 0.5px;
|
| 59 |
}
|
| 60 |
|
|
|
|
| 61 |
.mode-selector {
|
| 62 |
display: grid;
|
| 63 |
grid-template-columns: repeat(3, 1fr);
|
|
|
|
| 113 |
letter-spacing: 0.8px;
|
| 114 |
}
|
| 115 |
|
| 116 |
+
label i {
|
| 117 |
margin-right: 6px;
|
| 118 |
font-size: 0.9em;
|
| 119 |
}
|
| 120 |
|
|
|
|
| 121 |
select, textarea, input[type="text"] {
|
| 122 |
padding: 12px 14px;
|
| 123 |
border: 1px solid var(--border);
|
|
|
|
| 201 |
margin-right: 10px;
|
| 202 |
}
|
| 203 |
|
|
|
|
| 204 |
.sub-mode-selector {
|
| 205 |
display: flex;
|
| 206 |
justify-content: center;
|
|
|
|
| 235 |
display: contents;
|
| 236 |
}
|
| 237 |
|
|
|
|
|
|
|
| 238 |
@media (max-width: 600px) {
|
| 239 |
.form-grid {
|
| 240 |
grid-template-columns: 1fr;
|
|
|
|
| 249 |
font-size: 1.8rem;
|
| 250 |
}
|
| 251 |
.mode-selector {
|
| 252 |
+
grid-template-columns: 1fr;
|
| 253 |
gap: 5px;
|
| 254 |
}
|
| 255 |
}
|
|
|
|
| 256 |
</style>
|
| 257 |
</head>
|
| 258 |
<body>
|
|
|
|
| 270 |
<form id="promptForm">
|
| 271 |
<div class="form-grid">
|
| 272 |
|
|
|
|
| 273 |
<div id="modelMode" class="form-mode">
|
|
|
|
| 274 |
<div class="form-group">
|
| 275 |
<label for="gender">Пол</label>
|
| 276 |
<select id="gender" onchange="autoAdjustDefaults()">
|
|
|
|
| 287 |
<option value="30-40 years old">30-40 лет</option>
|
| 288 |
</select>
|
| 289 |
</div>
|
|
|
|
| 290 |
<div class="form-group">
|
| 291 |
<label for="nationality">Внешность/Этнос</label>
|
| 292 |
<select id="nationality">
|
|
|
|
| 306 |
<option value="Skinny model look">Модельная худоба</option>
|
| 307 |
</select>
|
| 308 |
</div>
|
|
|
|
| 309 |
<div class="form-group">
|
| 310 |
<label for="hairColor">Цвет волос</label>
|
| 311 |
<select id="hairColor">
|
|
|
|
| 325 |
<option value="Fade cut">Фейд (Мужской)</option>
|
| 326 |
</select>
|
| 327 |
</div>
|
|
|
|
| 328 |
<div class="form-group">
|
| 329 |
<label for="emotion">Эмоция/Выражение лица</label>
|
| 330 |
<select id="emotion">
|
|
|
|
| 342 |
<option value="walking towards camera">Идет на камеру</option>
|
| 343 |
<option value="sitting relaxed">Сидит расслабленно</option>
|
| 344 |
<option value="leaning against a wall">Оперевшись о стену</option>
|
| 345 |
+
<option value="dynamic action pose" selected>Динамичная поза</option>
|
| 346 |
</select>
|
| 347 |
</div>
|
|
|
|
| 348 |
<div class="form-group">
|
| 349 |
<label for="shotType">Ракурс/План</label>
|
| 350 |
<select id="shotType">
|
|
|
|
| 365 |
<option value="neon lights">Неоновый</option>
|
| 366 |
</select>
|
| 367 |
</div>
|
|
|
|
| 368 |
<div class="form-group">
|
| 369 |
<label for="style">Эстетика</label>
|
| 370 |
<select id="style">
|
|
|
|
| 386 |
<option value="shot on 35mm film, Kodak Portra 400">Пленка Kodak Portra</option>
|
| 387 |
</select>
|
| 388 |
</div>
|
|
|
|
|
|
|
| 389 |
<div class="form-group full-width">
|
| 390 |
<label for="location">Локация</label>
|
| 391 |
<select id="location">
|
|
|
|
| 401 |
<option value="inside a futuristic, sci-fi corridor with glowing lines">Фантастика (коридор)</option>
|
| 402 |
</select>
|
| 403 |
</div>
|
|
|
|
| 404 |
<div class="form-group full-width">
|
| 405 |
+
<label for="model_details">Одежда и Детали (Опишите ткань и фасон!)</label>
|
| 406 |
+
<textarea id="model_details" placeholder="Укажите ткань и детали. Пример: в черном кожаном плаще с грубой текстурой, заметные швы, массивная металлическая фурнитура, шелковый шарф"></textarea>
|
| 407 |
</div>
|
| 408 |
</div>
|
| 409 |
|
|
|
|
| 410 |
<div id="childrenMode" class="form-mode">
|
| 411 |
<div class="full-width sub-mode-selector">
|
| 412 |
<button id="newbornBtn" type="button" class="sub-mode-btn" onclick="switchChildrenSubMode('newborn')">Новорождённые</button>
|
| 413 |
<button id="olderChildrenBtn" type="button" class="sub-mode-btn" onclick="switchChildrenSubMode('older')">Дети и подростки</button>
|
| 414 |
</div>
|
| 415 |
|
|
|
|
| 416 |
<div id="newbornSubMode" class="sub-form-mode">
|
| 417 |
<div class="form-group">
|
| 418 |
<label>Пол</label>
|
|
|
|
| 453 |
</select>
|
| 454 |
</div>
|
| 455 |
<div class="form-group full-width">
|
| 456 |
+
<label for="newborn_details">Одежда и Детали (Ткань, вязка)</label>
|
| 457 |
+
<textarea id="newborn_details" placeholder="Пример: в вязаной шапочке крупной вязки (шерсть мериноса), хлопковая пеленка с текстурой муслина"></textarea>
|
| 458 |
</div>
|
| 459 |
</div>
|
| 460 |
|
|
|
|
| 461 |
<div id="olderChildrenSubMode" class="sub-form-mode">
|
| 462 |
<div class="form-group">
|
| 463 |
<label for="child_gender">Пол</label>
|
|
|
|
| 505 |
</select>
|
| 506 |
</div>
|
| 507 |
<div class="form-group full-width">
|
| 508 |
+
<label for="child_details">Одежда и Детали (Опишите материалы!)</label>
|
| 509 |
+
<textarea id="child_details" placeholder="Пример: джинсовый комбинезон с потертостями и металлическими пуговицами, вельветовая рубашка в рубчик"></textarea>
|
| 510 |
</div>
|
| 511 |
</div>
|
| 512 |
|
|
|
|
| 513 |
<div class="form-group">
|
| 514 |
<label for="child_shotType">Ракурс/План</label>
|
| 515 |
<select id="child_shotType">
|
|
|
|
| 550 |
</div>
|
| 551 |
</div>
|
| 552 |
|
|
|
|
| 553 |
<div id="objectMode" class="form-mode">
|
| 554 |
<div class="form-group full-width">
|
| 555 |
<label for="object_name">Название/Описание предмета</label>
|
|
|
|
| 597 |
</div>
|
| 598 |
<div class="form-group full-width">
|
| 599 |
<label for="object_details">Дополнительные детали окружения</label>
|
| 600 |
+
<textarea id="object_details" placeholder="Пример: капли воды на флаконе, текстура кожи ремешка, гравировка на металле"></textarea>
|
| 601 |
</div>
|
| 602 |
<div class="form-group full-width">
|
| 603 |
<label class="checkbox-label">Креативность</label>
|
|
|
|
| 642 |
document.getElementById('olderChildrenBtn').classList.toggle('active', subMode === 'older');
|
| 643 |
}
|
| 644 |
|
|
|
|
| 645 |
function autoAdjustDefaults() {
|
| 646 |
if (currentMode !== 'model') return;
|
| 647 |
const gender = document.getElementById('gender').value;
|
|
|
|
| 662 |
document.getElementById('object_background').disabled = isCreative;
|
| 663 |
}
|
| 664 |
|
|
|
|
| 665 |
async function processAndOpen() {
|
| 666 |
const btn = document.querySelector('.action-btn');
|
| 667 |
const originalText = btn.innerHTML;
|
| 668 |
let fullPrompt = '';
|
| 669 |
|
|
|
|
|
|
|
| 670 |
if (currentMode === 'model') {
|
| 671 |
const style = document.getElementById('style').value;
|
| 672 |
const shotType = document.getElementById('shotType').value;
|
|
|
|
| 678 |
const hairstyle = document.getElementById('hairstyle').value;
|
| 679 |
const emotion = document.getElementById('emotion').value;
|
| 680 |
const pose = document.getElementById('pose').value;
|
| 681 |
+
const details = document.getElementById('model_details').value || "high-end fashion garments";
|
| 682 |
const location = document.getElementById('location').value;
|
| 683 |
const light = document.getElementById('light').value;
|
| 684 |
const camera = document.getElementById('camera').value;
|
| 685 |
|
|
|
|
|
|
|
| 686 |
fullPrompt = `style:: ${style}.
|
| 687 |
composition:: ${shotType}.
|
| 688 |
+
subject:: Photorealistic portrait of a ${age} ${nationality} ${gender}.
|
| 689 |
+
model_characteristics:: physique ${bodyType}, ${hairColor} ${hairstyle}, expression ${emotion}, pose ${pose}.
|
| 690 |
+
clothing_focus:: The subject is wearing ${details}.
|
| 691 |
+
texture_&_material_fidelity:: Render clothing with extreme macro precision. Focus on fabric weave, thread count, visible stitching seams, material weight, realistic folds, tactile surface imperfections, and light interaction with the fabric (sheen, matte, transparency). Every thread and fiber must be sharp and visible.
|
| 692 |
+
scene_environment:: ${location}.
|
| 693 |
+
technical:: professional photography, ${light}, shot on ${camera}, 8k, sharp focus, hyper-detailed, realistic skin texture with pores, raw photo, uncompressed, macro fabric details.`;
|
| 694 |
|
| 695 |
} else if (currentMode === 'children') {
|
| 696 |
const style = document.getElementById('child_style').value;
|
|
|
|
| 698 |
const location = document.getElementById('child_location').value;
|
| 699 |
const light = document.getElementById('child_light').value;
|
| 700 |
let subject = '';
|
| 701 |
+
let pose_info = '';
|
| 702 |
+
let clothing_details = '';
|
| 703 |
|
| 704 |
if(currentChildrenSubMode === 'newborn') {
|
| 705 |
const age = document.getElementById('newborn_age').value;
|
| 706 |
const ethnicity = document.getElementById('newborn_ethnicity').value;
|
| 707 |
const emotion = document.getElementById('newborn_emotion').value;
|
| 708 |
const pose = document.getElementById('newborn_pose').value;
|
| 709 |
+
clothing_details = document.getElementById('newborn_details').value || "soft knitted fabric";
|
| 710 |
subject = `A beautiful, photorealistic portrait of a ${age} ${ethnicity} baby. Face expression is ${emotion}.`;
|
| 711 |
+
pose_info = `The baby is ${pose}.`;
|
| 712 |
+
} else {
|
| 713 |
const age = document.getElementById('child_age').value;
|
| 714 |
const gender = document.getElementById('child_gender').value;
|
| 715 |
const ethnicity = document.getElementById('child_ethnicity').value;
|
| 716 |
const emotion = document.getElementById('child_emotion').value;
|
| 717 |
const pose = document.getElementById('child_pose').value;
|
| 718 |
+
clothing_details = document.getElementById('child_details').value || "detailed textured casual clothes";
|
| 719 |
subject = `A beautiful, photorealistic portrait of a ${age} ${ethnicity} ${gender}. Face expression is ${emotion}.`;
|
| 720 |
+
pose_info = `The child is ${pose}.`;
|
| 721 |
}
|
| 722 |
|
| 723 |
fullPrompt = `style:: ${style}.
|
| 724 |
composition:: ${shotType}.
|
| 725 |
subject:: ${subject}
|
| 726 |
+
clothing_focus:: The child is wearing ${clothing_details}.
|
| 727 |
+
texture_&_material_fidelity:: Extreme attention to textile details. Render the exact texture of knitted wool, denim, cotton, or lace. Show individual threads, fabric fuzz, stitching patterns, and realistic material draping. 100% texture fidelity.
|
| 728 |
+
scene_activity:: ${pose_info} The location is ${location}.
|
| 729 |
+
technical:: professional photography, ${light}, shot on Fujifilm XT4, 56mm F1.2 lens, 8k, sharp focus, hyper-detailed, realistic skin texture, tactile fabric textures, masterpiece.`;
|
| 730 |
|
| 731 |
+
} else {
|
| 732 |
const objectName = document.getElementById('object_name').value || "a product";
|
| 733 |
const objectStyle = document.getElementById('object_style').value;
|
| 734 |
const objectLighting = document.getElementById('object_lighting').value;
|
| 735 |
const objectComposition = document.getElementById('object_composition').value;
|
| 736 |
const isCreative = document.getElementById('creative_mode').checked;
|
| 737 |
+
const objectDetails = document.getElementById('object_details').value || "rich textures";
|
| 738 |
|
| 739 |
let background = '';
|
| 740 |
if (isCreative) {
|
|
|
|
| 745 |
|
| 746 |
fullPrompt = `style:: Professional product photography, ${objectStyle}.
|
| 747 |
subject:: A hyper-detailed shot of ${objectName}.
|
| 748 |
+
material_focus:: Render materials with 100% physical accuracy. Focus on surface imperfections, microscopic scratches, dust particles, realistic refractions, material grain (leather, metal, glass, plastic), and tactile finish.
|
| 749 |
+
scene_context:: Placed ${background}. Additional details: ${objectDetails}.
|
| 750 |
composition:: ${objectComposition}.
|
| 751 |
+
technical:: commercial studio quality, ${objectLighting}, 8k resolution, sharp focus, ultra-realistic, macro details, ray-traced reflections, masterpiece.`;
|
| 752 |
}
|
| 753 |
|
| 754 |
const cleanPrompt = fullPrompt.replace(/\s+/g, ' ').replace(/\n/g, ' ').trim();
|