Aleksmorshen commited on
Commit
3cfc13d
·
verified ·
1 Parent(s): 2eb9d12

Update index.html

Browse files
Files changed (1) hide show
  1. 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">Одежда и Детали</label>
422
- <textarea id="model_details" placeholder="Пример: в черном кожаном плаще и грубых ботинках, смотрит в камеру"></textarea>
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">Одежда и Детали</label>
475
- <textarea id="newborn_details" placeholder="Пример: в милой вязаной шапочке с ушками"></textarea>
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">Одежда и Детали</label>
528
- <textarea id="child_details" placeholder="Пример: в джинсовом комбинезоне и яркой футболке"></textarea>
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="Пример: капли воды на флаконе, рядом лежат кофейные зерна и палочка корицы"></textarea>
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 || "in a casual stylish outfit";
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:: A photorealistic portrait of a ${age} ${nationality} ${gender}.
716
- model_details:: physique is ${bodyType}, ${hairColor} ${hairstyle}, face expression is ${emotion}, pose is ${pose}.
717
- scene:: ${scene}.
718
- technical:: professional photography, ${light}, shot on ${camera}, 8k, sharp focus, hyper-detailed, realistic skin texture with pores, masterpiece.`;
 
 
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 scene_details = '';
 
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
- const details = document.getElementById('newborn_details').value || "wearing cute and simple clothes";
734
  subject = `A beautiful, photorealistic portrait of a ${age} ${ethnicity} baby. Face expression is ${emotion}.`;
735
- scene_details = `The baby is ${pose}. The baby is ${details}.`;
736
- } else { // 'older' sub-mode
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
- const details = document.getElementById('child_details').value || "in stylish casual clothes";
743
  subject = `A beautiful, photorealistic portrait of a ${age} ${ethnicity} ${gender}. Face expression is ${emotion}.`;
744
- scene_details = `The child is ${pose}. The child is ${details}.`;
745
  }
746
 
747
  fullPrompt = `style:: ${style}.
748
  composition:: ${shotType}.
749
  subject:: ${subject}
750
- scene:: ${scene_details} The scene is ${location}.
751
- technical:: professional photography, ${light}, shot on Fujifilm XT4, 56mm F1.2 lens, 8k, sharp focus, hyper-detailed, realistic skin texture, masterpiece.`;
 
 
752
 
753
- } else { // Object mode
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 || "clean and elegant";
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
- scene:: Placed ${background}. The scene includes additional elements: ${objectDetails}.
 
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();