Kgshop commited on
Commit
fe9fdb5
·
verified ·
1 Parent(s): 8aa06be

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +260 -133
app.py CHANGED
@@ -1,4 +1,3 @@
1
-
2
  import os
3
  import io
4
  import base64
@@ -738,15 +737,15 @@ SYNKRIS_LOOK_TEMPLATE = '''
738
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
739
  <style>
740
  :root {
741
- --bg: #0a0a0c;
742
- --card-bg: #151518;
743
  --primary: #c8ff00;
744
  --primary-hover: #b8e600;
745
  --primary-gradient: linear-gradient(45deg, #d4ff33, #aaff00);
746
  --text: #f0f0f0;
747
  --text-secondary: #a0a0a0;
748
- --border: #2a2a30;
749
- --input-bg: #1c1c21;
750
  --danger: #ff4d4d;
751
  }
752
 
@@ -776,7 +775,7 @@ body {
776
  padding: 30px 35px;
777
  border-radius: 24px;
778
  border: 1px solid var(--border);
779
- box-shadow: 0 24px 80px rgba(0, 0, 0, 0.5);
780
  animation: fadeIn 0.6s cubic-bezier(0.25, 1, 0.5, 1);
781
  }
782
 
@@ -799,7 +798,7 @@ h1 span {
799
  background: var(--primary-gradient);
800
  -webkit-background-clip: text;
801
  -webkit-text-fill-color: transparent;
802
- text-shadow: 0 0 30px rgba(200, 255, 0, 0.2);
803
  }
804
 
805
  p.subtitle {
@@ -836,7 +835,7 @@ p.subtitle {
836
  background: var(--primary);
837
  color: #000;
838
  border-color: var(--primary);
839
- box-shadow: 0 0 10px rgba(200, 255, 0, 0.2);
840
  }
841
 
842
  .mode-selector {
@@ -866,7 +865,7 @@ p.subtitle {
866
  .mode-btn.active {
867
  background: var(--primary);
868
  color: #000;
869
- box-shadow: 0 4px 15px rgba(200, 255, 0, 0.3);
870
  transform: translateY(-1px);
871
  }
872
 
@@ -922,7 +921,7 @@ label {
922
  select, textarea {
923
  padding: 15px;
924
  border: 1px solid var(--border);
925
- border-radius: 12px;
926
  font-size: 0.95rem;
927
  font-weight: 500;
928
  background-color: var(--input-bg);
@@ -949,7 +948,7 @@ select:disabled {
949
 
950
  select:focus, textarea:focus {
951
  border-color: var(--primary);
952
- box-shadow: 0 0 0 2px rgba(200, 255, 0, 0.2);
953
  }
954
 
955
  textarea {
@@ -1013,7 +1012,7 @@ textarea {
1013
  }
1014
 
1015
  .style-btn:hover { border-color: var(--primary); color: var(--text); transform: translateY(-2px); }
1016
- .style-btn.active { background-color: var(--primary); color: #000; border-color: var(--primary); font-weight: 700; transform: translateY(-2px); box-shadow: 0 4px 15px rgba(200, 255, 0, 0.2); }
1017
 
1018
  .aspect-ratio-grid {
1019
  display: grid;
@@ -1040,7 +1039,7 @@ textarea {
1040
  }
1041
  .aspect-ratio-btn .preview { background: #444; border-radius: 4px; transition: background-color 0.3s ease; }
1042
  .aspect-ratio-btn:hover { border-color: var(--primary); color: var(--text); transform: translateY(-2px); }
1043
- .aspect-ratio-btn.active { background-color: var(--primary); color: #000; border-color: var(--primary); transform: translateY(-2px); box-shadow: 0 4px 15px rgba(200, 255, 0, 0.2); }
1044
  .aspect-ratio-btn.active .preview { background: #000; }
1045
 
1046
  .checkbox-group {
@@ -1125,6 +1124,7 @@ textarea {
1125
  margin-left: 8px;
1126
  vertical-align: middle;
1127
  display: inline-block;
 
1128
  }
1129
 
1130
  .style-btn .badge-new {
@@ -1135,6 +1135,8 @@ textarea {
1135
  font-size: 0.65em;
1136
  }
1137
 
 
 
1138
  .button-link {
1139
  background: none;
1140
  border: 1px solid var(--border);
@@ -1190,50 +1192,6 @@ textarea {
1190
  opacity: 1;
1191
  }
1192
 
1193
- #iframeOverlay {
1194
- display: none;
1195
- position: fixed;
1196
- top: 0;
1197
- left: 0;
1198
- width: 100%;
1199
- height: 100%;
1200
- background-color: var(--bg);
1201
- z-index: 9999;
1202
- flex-direction: column;
1203
- }
1204
- .iframe-header {
1205
- display: flex;
1206
- justify-content: space-between;
1207
- align-items: center;
1208
- padding: 15px 20px;
1209
- background-color: var(--card-bg);
1210
- border-bottom: 1px solid var(--border);
1211
- }
1212
- .iframe-header h3 {
1213
- margin: 0;
1214
- color: var(--text);
1215
- font-size: 1.2rem;
1216
- }
1217
- .iframe-header button {
1218
- background: var(--danger);
1219
- color: #fff;
1220
- border: none;
1221
- padding: 8px 16px;
1222
- border-radius: 8px;
1223
- cursor: pointer;
1224
- font-weight: bold;
1225
- transition: opacity 0.2s;
1226
- }
1227
- .iframe-header button:hover {
1228
- opacity: 0.8;
1229
- }
1230
- #synkrisIframe {
1231
- flex-grow: 1;
1232
- width: 100%;
1233
- border: none;
1234
- background: #fff;
1235
- }
1236
-
1237
  @media (max-width: 700px) {
1238
  body { padding: 10px; }
1239
  .container { padding: 20px 15px; }
@@ -1256,7 +1214,6 @@ textarea {
1256
  <button id="lang-ru" onclick="setLanguage('ru')">RU</button>
1257
  <button id="lang-kz" onclick="setLanguage('kz')">KZ</button>
1258
  <button id="lang-kg" onclick="setLanguage('kg')">KG</button>
1259
- <button id="lang-tr" onclick="setLanguage('tr')">TR</button>
1260
  </div>
1261
  </div>
1262
  <h1><span>Synkris</span></h1>
@@ -1284,6 +1241,14 @@ textarea {
1284
  <input type="checkbox" id="celebrityCheck">
1285
  <label for="celebrityCheck" data-lang-key="celebrityCheck">Знаменитости</label>
1286
  </div>
 
 
 
 
 
 
 
 
1287
  </div>
1288
  </div>
1289
 
@@ -1524,6 +1489,14 @@ textarea {
1524
  <input type="checkbox" id="childCelebrityCheck">
1525
  <label for="childCelebrityCheck" data-lang-key="celebrityCheck">Знаменитости</label>
1526
  </div>
 
 
 
 
 
 
 
 
1527
  </div>
1528
  </div>
1529
  <div id="childCelebrityParamsContainer" class="celebrity-grid">
@@ -1726,6 +1699,14 @@ textarea {
1726
  <input type="checkbox" id="objectCelebrityCheck">
1727
  <label for="objectCelebrityCheck" data-lang-key="celebrityCheck">Знаменитости</label>
1728
  </div>
 
 
 
 
 
 
 
 
1729
  <div class="checkbox-item">
1730
  <input type="checkbox" id="objectFurnitureCheck">
1731
  <label for="objectFurnitureCheck" data-lang-key="objectFurnitureCheck">Мебель / Ковры</label>
@@ -1941,6 +1922,14 @@ textarea {
1941
  <input type="checkbox" id="cosmeticsCelebrityCheck">
1942
  <label for="cosmeticsCelebrityCheck" data-lang-key="celebrityCheck">Знаменитости</label>
1943
  </div>
 
 
 
 
 
 
 
 
1944
  </div>
1945
  </div>
1946
 
@@ -2143,21 +2132,13 @@ textarea {
2143
  </form>
2144
  </div>
2145
 
2146
- <div id="iframeOverlay">
2147
- <div class="iframe-header">
2148
- <h3>Synkris Platform</h3>
2149
- <button onclick="document.getElementById('iframeOverlay').style.display='none'; document.getElementById('synkrisIframe').src='';">Закрыть</button>
2150
- </div>
2151
- <iframe id="synkrisIframe" src=""></iframe>
2152
- </div>
2153
-
2154
  <script>
2155
  let currentMode = 'model';
2156
  const envKeyword = {{ keyword|tojson|safe }};
2157
  const promptsData = {{ prompts_data|tojson|safe }};
2158
 
2159
  const c_m = {"Adam Driver":"Адам Драйвер","Al Pacino":"Аль Пачино","Anthony Hopkins":"Энтони Хопкинс","Antonio Banderas":"Антонио Бандерас","Arnold Schwarzenegger":"Арнольд Шварценеггер","Bad Bunny":"Bad Bunny","Benedict Cumberbatch":"Бенедикт Камбербэтч","Brad Pitt":"Брэд Питт","Bradley Cooper":"Брэдли Купер","Bruce Willis":"Брюс Уиллис","Channing Tatum":"Ченнинг Татум","Chris Evans":"Крис Эванс","Chris Hemsworth":"Крис Хемсворт","Chris Pratt":"Крис Прэтт","Christian Bale":"Кристиан Бэйл","Cillian Murphy":"Киллиан Мёрфи","Clint Eastwood":"Клинт Иствуд","Colin Farrell":"Колин Фаррелл","Daniel Craig":"Дэниел Крейг","Danny DeVito":"Дэнни ДеВито","Denzel Washington":"Дензел Вашингтон","Donald Trump":"Дональд Трамп","Dwayne Johnson":"Дуэйн Джонсон","Eddie Murphy":"Эдди Мерфи","Elon Musk":"Илон Маск","George Clooney":"Джордж Клуни","Harry Styles":"Гарри Стайлс","Henry Cavill":"Генри Кавилл","Hugh Jackman":"Хью Джекман","Idris Elba":"Идрис Эльба","Jackie Chan":"Джеки Чан","Jake Gyllenhaal":"Джейк Джилленхол","Jason Momoa":"Джейсон Момоа","Jason Statham":"Джейсон Стейтем","Javier Bardem":"Хавьер Бардем","Jeff Goldblum":"Джефф Голдблюм","Joaquin Phoenix":"Хоакин Феникс","Joe Rogan":"Джо Роган","John Travolta":"Джон Траволта","Johnny Depp":"Джонни Депп","Jude Law":"Джуд Лоу","Kanye West":"Канье Уэст","Keanu Reeves":"Киану Ривз","Kevin Hart":"Кевин Харт","Leonardo DiCaprio":"Леонардо Ди Каприо","Liam Neeson":"Лиам Нисон","Mads Mikkelsen":"Мадс Миккельсен","Mark Zuckerberg":"Марк Цукерберг","Matt Damon":"Мэтт Дэймон","Matthew McConaughey":"Мэттью МакКонахи","Mel Gibson":"Мэл Гибсон","Michael B. Jordan":"Майкл Б. Джордан","Morgan Freeman":"Морган Фриман","Nicolas Cage":"Николас Кейдж","Oscar Isaac":"Оскар Айзек","Robert De Niro":"Роберт Де Ниро","Robert Downey Jr.":"Роберт Дауни-младший","Ryan Gosling":"Райан Гослинг","Ryan Reynolds":"Райан Рейнольдс","Samuel L. Jackson":"Сэмюэл Л. Джексон","Sylvester Stallone":"Сильвестр Сталлоне","The Weeknd":"The Weeknd","Timothée Chalamet":"Тимоти Шаламе","Tom Cruise":"Том Круз","Tom Hanks":"Том Хэнкс","Tom Hardy":"Том Харди","Tom Holland":"Том Холланд","Travis Scott":"Трэвис Скотт","Vin Diesel":"Вин Дизель","Will Smith":"Уилл Смит","Willem Dafoe":"Уиллем Дефо","Woody Harrelson":"Вуди Харрельсон","Cristiano Ronaldo":"Криштиану Роналду","Lionel Messi":"Лионель Месси","Neymar Jr.":"Неймар","Conor McGregor":"Конор Макгрегор","Khabib Nurmagomedov":"Хабиб Нурмагомедов","Jon Jones":"Джон Джонс","Israel Adesanya":"Исраэль Адесанья","Kamaru Usman":"Камару Усман","Francis Ngannou":"Фрэнсис Нганну","Islam Makhachev":"Ислам Махачев","Khamzat Chimaev":"Хамзат Чимаев","Sean O'Malley":"Шон О'Мэлли","Shavkat Rakhmonov":"Шавкат Рахмонов","Alex Pereira":"Алекс Перейра","Jorge Masvidal":"Хорхе Масвидаль"};
2160
- const c_f = {"Adriana Lima":"Адриана Лима","Alexandra Daddario":"Александра Даддарио","Amanda Seyfried":"Аманда Сейфрид","Ana de Armas":"Ана де Армас","Angelina Jolie":"Анджелина Джоли","Anne Hathaway":"Энн Хэтэуэй","Anya Taylor-Joy":"Аня Тейлор-Джой","Ariana Grande":"Ариана Гранде","Bella Hadid":"Белла Хадид","Beyonce":"Бейонсе","Billie Eilish":"Билли Айлиш","Blake Lively":"Блейк Лайвли","Cameron Diaz":"Кэмерон Диаз","Cara Delevingne":"Кара Делевинь","Cate Blanchett":"Кейт Бланшетт","Charlize Theron":"Шарлиз Терон","Christina Hendricks":"Кристина Хендрикс","Dakota Johnson":"Дакота Джонсон","Doja Cat":"Doja Cat","Dua Lipa":"Дуа Липа","Elizabeth Olsen":"Элизабет Олсен","Emily Ratajkowski":"Эмили Ратаковски","Emma Stone":"Эмма Стоун","Emma Watson":"Эмма Уотсон","Eva Green":"Ева Грин","Eva Mendes":"Ева Мендес","Florence Pugh":"Флоренс Пью","Gal Gadot":"Галь Гадот","Gigi Hadid":"Джиджи Хадид","Gisele Bündchen":"Жизель Бюндхен","Hailey Bieber":"Хейли Бибер","Halle Berry":"Хэлли Берри","Irina Shayk":"Ирина Şeyk","Jenna Ortega":"Дженна Ортега","Jennifer Aniston":"Дженнифер Энистон","Jennifer Connelly":"Дженнифер Коннелли","Jennifer Lawrence":"Дженнифер Лоуренс","Jennifer Lopez":"Дженнифер Лопес","Jessica Alba":"Джессика Альба","Jessica Chastain":"Джессика Честейн","Julia Roberts":"Джулия Робертс","Kate Beckinsale":"Кейт Бекинсейл","Keira Knightley":"Кира Найтли","Kendall Jenner":"Кендалл Дженнер","Kim Kardashian":"Ким Кардашьян","Kristen Stewart":"Кристен Стюарт","Kylie Jenner":"Кайли Дженнер","Lady Gaga":"Леди Гага","Margot Robbie":"Марго Робби","Megan Fox":"Меган Фокс","Mila Kunis":"Мила Кунис","Monica Bellucci":"Моника Беллуччи","Natalie Portman":"Натали Портман","Nicole Kidman":"Николь Кидман","Olivia Wilde":"Оливия Уайлд","Penélope Cruz":"Пенелопа Крус","Rihanna":"Рианна","Salma Hayek":"Сальма Хайек","Scarlett Johansson":"Скарлетт Йоханссон","Selena Gomez":"Селена Гомес","Shakira":"Шакира","Sydney Sweeney":"Сидни Суини","Taylor Swift":"Тейлор Свифт","Zendaya":"Зендая","Zoe Kravitz":"Зои Кравиц","Zoe Saldana":"Зои Салдана"};
2161
  const cc_m = {"Caleb McLaughlin (Stranger Things)":"Калеб Маклафлин","Daniel Radcliffe (Harry Potter)":"Дэниел Рэдклифф","Finn Wolfhard (Stranger Things)":"Финн Вулфхард","Gaten Matarazzo (Stranger Things)":"Гейте�� Матараццо","Iain Armitage (Young Sheldon)":"Иэн Армитидж","Jacob Tremblay":"Джейкоб Трамбле","Jaden Smith":"Джейден Смит","Macaulay Culkin (Home Alone)":"Маколей Калкин","Noah Schnapp (Stranger Things)":"Ноа Шнапп","Walker Scobell (The Adam Project)":"Уокер Скобелл"};
2162
  const cc_f = {"Dakota Fanning":"Дакота Фаннинг","Elle Fanning":"Эль Фаннинг","Emma Watson (Harry Potter)":"Эмма Уотсон","Mckenna Grace":"Маккенна Грейс","Millie Bobby Brown (Stranger Things)":"Милли Бобби Браун","North West":"Норт Уэст","Sadie Sink (Stranger Things)":"Сэди Синк","Storm Reid (A Wrinkle in Time)":"Сторм Рид","Suri Cruise":"Сури Круз"};
2163
 
@@ -2203,6 +2184,7 @@ const translations = {
2203
  logoOverlayCheck: "С логотипом", logoOverlayPlaceholder: "Опишите логотип, например: 'белый минималистичный текст Synkris в правом нижнем углу'",
2204
  launchBtn: "Launch Synkris", copied_launching: "ПРОМПТ СКОПИРОВАН. ЗАПУСК... 🚀", copy_failed: "Не удалось скопировать. Промпт в консоли разработчика.",
2205
  your_prompt: "Ваш промпт:", resetModelSettingsBtn: "Сбросить настройки модели", resetConfirm: "Вы уверены, что хотите сбросить настройки модели до значений по умолчанию?",
 
2206
  flagship_styles: {'studio': 'Студия (люкс)', 'product_focus_light': 'Маркетплейс', 'street': 'Стрит-стайл', 'lookbook': 'Лукбук', 'minimalism': 'Минимализм', 'urban_loft_lifestyle': 'Лофт', 'elevator_mirror_selfie': 'Селфи в лифте', 'car_interior_lifestyle': 'В салоне авто', 'golden_hour_field': 'Золотой час в поле', 'messy_bedroom_morning': 'Утро в спальне', 'vintage_35mm_film': 'Винтажная пленка', 'paparazzi_street_flash': 'Папарацци-вспышка', 'cafe_window_contemplation': 'У окна в кафе', 'rooftop_party_sunset': 'Вечеринка на крыше', 'bookstore_aisle_cozy': 'Книжный магазин', 'custom_background_fusion': 'Свой фон (профи)', 'polaroid_snapshot': 'Полароид', 'creative': 'Креатив', 'retro': 'Ретро', 'boho': 'Бохо', 'forest_nymph': 'Лес', 'desert_expedition': 'Пустыня', 'gothic': 'Готика', 'editorial': 'Эдиториал', 'film_noir': 'Нуар', 'cottagecore': 'Коттеджкор', 'royalcore': 'Дворец', 'solarpunk': 'Соларпанк', 'skater': 'Скейтер', 'vibrant_market': 'Рынок', 'cyberpunk': 'Киберпанк', 'fantasy': 'Фэнтези', 'surreal_dreamscape': 'Сюрреализм', 'techwear': 'Techwear', 'home_casual': 'Дом', 'backstage': 'Бэкстейдж', 'road_trip': 'Роуд-трип', 'rainy_day': 'Дождь', 'night_flash': 'Ночь (вспышка)', 'tropical_resort': 'Курорт', 'beach': 'Пляж', 'alaska_winter': 'Аляска (зима)', 'football_field': 'Футбольное поле', 'volcanic_ash_desert': 'Вулкан (Исландия)', 'salt_flats_mirage': 'Солончак (Боливия)', 'highlands_majesty': 'Нагорье (Шотландия)'},
2207
  object_styles: {'studio': 'Студия', 'minimalism': 'Минимализм', 'nature': 'Природа', 'luxe': 'Люкс', 'dark': 'Драма', 'geometric': 'Геометрия', 'floating': 'Левитация', 'lifestyle': 'Лайфстайл', 'splash': 'Всплеск', 'handmade': 'Мастерская', 'alaska_winter': 'Аляска (зима)', 'football_field': 'Футбольное поле', 'volcanic_ash_desert': 'Вулкан (Исландия)', 'salt_flats_mirage': 'Солончак (Боливия)', 'highlands_majesty': 'Нагорье (Шотландия)'},
2208
  female_body_types: {'standard': 'Стандартное', 'very_slim': 'Очень стройное (модель)', 'slim': 'Стройное (натуральное)', 'slim_busty': 'Стройное с пышной грудью', 'athletic': 'Атлетичное', 'petite': 'Миниатюрное', 'hourglass': 'Песочные часы', 'fit_curvy': 'Спортивное (curvy)', 'plus_size': 'Пышные', 'curvy': 'Мягкое (curvy)', 'full_figured': 'Плюс-сайз', 'pregnant': 'Беременная (одежда для беременных)'},
@@ -2258,6 +2240,7 @@ const translations = {
2258
  logoOverlayCheck: "Логотиппен", logoOverlayPlaceholder: "Логотипті сипаттаңыз, мысалы: 'оң жақ төменгі бұрыштағы Synkris ақ минималистік мәтіні'",
2259
  launchBtn: "Synkris іске қосу", copied_launching: "ПРОМПТ КӨШІРІЛДІ. ІСКЕ ҚОСУ... 🚀", copy_failed: "Көшіру мүмкін болмады. Промпт әзірлеуші консолінде.",
2260
  your_prompt: "Сіздің промптыңыз:", resetModelSettingsBtn: "Модель баптауларын қалпына келтіру", resetConfirm: "Модель баптауларын әдепкі мәндерге қайтарғыңыз келетініне сенімдісіз бе?",
 
2261
  flagship_styles: {'studio': 'Студия (люкс)', 'product_focus_light': 'Маркетплейс', 'street': 'Стрит-стайл', 'lookbook': 'Лукбук', 'minimalism': 'Минимализм', 'urban_loft_lifestyle': 'Лофт', 'elevator_mirror_selfie': 'Лифттегі селфи', 'car_interior_lifestyle': 'Авто салонында', 'golden_hour_field': 'Алтын сағат', 'messy_bedroom_morning': 'Жатын бөлме', 'vintage_35mm_film': 'Винтаж пленка', 'paparazzi_street_flash': 'Папарацци', 'cafe_window_contemplation': 'Кафеде', 'rooftop_party_sunset': 'Шатырдағы кеш', 'bookstore_aisle_cozy': 'Кітап дүкені', 'custom_background_fusion': 'Өз фоныңыз (профи)', 'polaroid_snapshot': 'Полароид', 'creative': 'Креатив', 'retro': 'Ретро', 'boho': 'Бохо', 'forest_nymph': 'Орман', 'desert_expedition': 'Шөл', 'gothic': 'Готика', 'editorial': 'Эдиториал', 'film_noir': 'Нуар', 'cottagecore': 'Коттеджкор', 'royalcore': 'Сарай', 'solarpunk': 'Соларпанк', 'skater': 'Скейтер', 'vibrant_market': 'Базар', 'cyberpunk': 'Киберпанк', 'fantasy': 'Фэнтези', 'surreal_dreamscape': 'Сюрреализм', 'techwear': 'Techwear', 'home_casual': 'Үй', 'backstage': 'Бэкстейдж', 'road_trip': 'Роуд-трип', 'rainy_day': 'Жаңбыр', 'night_flash': 'Түн (жарқыл)', 'tropical_resort': 'Курорт', 'beach': 'Жағажай', 'alaska_winter': 'Аляска (қыс)', 'football_field': 'Футбол алаңы', 'volcanic_ash_desert': 'Жанартау (Исландия)', 'salt_flats_mirage': 'Тұзды алқап (Боливия)', 'highlands_majesty': 'Таулы аймақ (Шотландия)'},
2262
  object_styles: {'studio': 'Студия', 'minimalism': 'Минимализм', 'nature': 'Табиғат', 'luxe': 'Люкс', 'dark': 'Драма', 'geometric': 'Геометрия', 'floating': 'Левитация', 'lifestyle': 'Лайфстайл', 'splash': 'Шашырау', 'handmade': 'Шеберхана', 'alaska_winter': 'Аляска (қыс)', 'football_field': 'Футбол алаңы', 'volcanic_ash_desert': 'Жанартау (Исландия)', 'salt_flats_mirage': 'Тұзды алқап (Боливия)', 'highlands_majesty': 'Таулы аймақ (Шотландия)'},
2263
  female_body_types: {'standard': 'Стандартты', 'very_slim': 'Өте сымбатты (модель)', 'slim': 'Сымбатты (табиғи)', 'slim_busty': 'Сымбатты, үлкен кеуделі', 'athletic': 'Атлетикалық', 'petite': 'Кішкентай', 'hourglass': 'Құм сағат', 'fit_curvy': 'Спорттық (curvy)', 'plus_size': 'Толық', 'curvy': 'Жұмсақ (curvy)', 'full_figured': 'Плюс-сайз', 'pregnant': 'Жүкті (жүкті әйелдерге арналған киім)'},
@@ -2313,6 +2296,7 @@ const translations = {
2313
  logoOverlayCheck: "Логотип менен", logoOverlayPlaceholder: "Логотипти сүрөттөп бериңиз, мисалы: 'оң жак төмөнкү бурчтагы Synkris ак минималисттик тексти'",
2314
  launchBtn: "Synkris ишке киргизүү", copied_launching: "ПРОМПТ КӨЧҮРҮЛДҮ. ИШКЕ КИРГИЗҮҮ... 🚀", copy_failed: "Көчүрүү мүмкүн болбоду. Промпт иштеп чыгуучунун консолунда.",
2315
  your_prompt: "Сиздин промптуңуз:", resetModelSettingsBtn: "Моделдин жөндөөлөрүн баштапкы абалга келтирүү", resetConfirm: "Моделдин жөндөөлөрүн баштапкы абалга келтирүүнү каалайсызбы?",
 
2316
  flagship_styles: {'studio': 'Студия (люкс)', 'product_focus_light': 'Маркетплейс', 'street': 'Стрит-стайл', 'lookbook': 'Лукбук', 'minimalism': 'Минимализм', 'urban_loft_lifestyle': 'Лофт', 'elevator_mirror_selfie': 'Лифттегі селфи', 'car_interior_lifestyle': 'Авто салонунда', 'golden_hour_field': 'Алтын саат', 'messy_bedroom_morning': 'Уктоочу бөлмө', 'vintage_35mm_film': 'Винтаж пленкасы', 'paparazzi_street_flash': 'Папарацци', 'cafe_window_contemplation': 'Кафеде', 'rooftop_party_sunset': 'Чатырдагы кече', 'bookstore_aisle_cozy': 'Китеп дүкөнү', 'custom_background_fusion': 'Өз фонуңуз (профи)', 'polaroid_snapshot': 'Полароид', 'creative': 'Креатив', 'retro': 'Ретро', 'boho': 'Бохо', 'forest_nymph': 'Токой', 'desert_expedition': 'Чөл', 'gothic': 'Готика', 'editorial': 'Эдиториал', 'film_noir': 'Нуар', 'cottagecore': 'Коттеджкор', 'royalcore': 'Сарай', 'solarpunk': 'Соларпанк', 'skater': 'Скейтер', 'vibrant_market': 'Базар', 'cyberpunk': 'Киберпанк', 'fantasy': 'Фэнтези', 'surreal_dreamscape': 'Сюрреализм', 'techwear': 'Techwear', 'home_casual': 'Үй', 'backstage': 'Бэкстейдж', 'road_trip': 'Роуд-трип', 'rainy_day': 'Жамгыр', 'night_flash': 'Түн (жарк)', 'tropical_resort': 'Курорт', 'beach': 'Пляж', 'alaska_winter': 'Аляска (кыш)', 'football_field': 'Футбол талаасы', 'volcanic_ash_desert': 'Вулкан (Исландия)', 'salt_flats_mirage': 'Туздуу түздүк (Боливия)', 'highlands_majesty': 'Тоолуу аймак (Шотландия)'},
2317
  object_styles: {'studio': 'Студия', 'minimalism': 'Минимализм', 'nature': 'Жаратылыш', 'luxe': 'Люкс', 'dark': 'Драма', 'geometric': 'Геометрия', 'floating': 'Левитация', 'lifestyle': 'Лайфстайл', 'splash': 'Чачыроо', 'handmade': 'Устакана', 'alaska_winter': 'Аляска (кыш)', 'football_field': 'Футбол талаасы', 'volcanic_ash_desert': 'Вулкан (Исландия)', 'salt_flats_mirage': 'Туздуу түздүк (Боливия)', 'highlands_majesty': 'Тоолуу аймак (Шотландия)'},
2318
  female_body_types: {'standard': 'Стандарттуу', 'very_slim': 'Абдан сымбаттуу (модель)', 'slim': 'Сымбаттуу (табигый)', 'slim_busty': 'Сымбаттуу, чоң төштүү', 'athletic': 'Атлетикалык', 'petite': 'Кичинекей', 'hourglass': 'Кум саат', 'fit_curvy': 'Спорттук (curvy)', 'plus_size': 'Толук', 'curvy': 'Жумшак (curvy)', 'full_figured': 'Плюс-сайз', 'pregnant': 'Кош бойлуу (кош бойлуулар үчүн кийим)'},
@@ -2326,76 +2310,21 @@ const translations = {
2326
  tattoo_styles: {"Scandinavian": "Скандинавиялык", "Polynesian": "Полинезиялык", "Japanese (Irezumi)": "Япон (Ирэдзуми)", "American Traditional": "Америкалык салттуу", "Blackwork": "Блэкворк", "Geometric": "Геометриялык", "Fine-line": "Ичке сызык", "Surrealism": "Сюрреализм", "Neo-Traditional": "Нео-салттуу"},
2327
  tattoo_coverages: {"a few small tattoos": "Бир нече кичинекей", "sleeve on one arm": "Бир колдогу жең", "full sleeves on both arms": "Эки колдогу жеңдер", "chest piece": "Көкүрөктө", "back piece": "Аркада", "heavily tattooed": "Көп чийилген", "fully covered": "Толугу менен капталган"},
2328
  celebrities_male: c_m, celebrities_female: c_f, child_celebrities_male: cc_m, child_celebrities_female: cc_f
2329
- },
2330
- tr: {
2331
- subtitle: "PROMPT OLUŞTURUCU VE BAŞLATICI", modeModel: "Model Üzerinde Fotoğraf", modeChildren: "Çocuklar", modeObject: "Nesne", modeCosmetics: "Kozmetik",
2332
- section1Title: "Model Parametreleri", section2Title: "Sahne ve Stil", section3Title: "Kompozisyon ve Detaylar", section1ObjectTitle: "Nesne Parametreleri",
2333
- section2ObjectTitle: "Sahne ve Stil", section1CosmeticsTitle: "Ürün ve Model", ownModelCheck: "Kendi modeliniz (2 fotoğraf kullanır: kıyafet + model)",
2334
- objectWithModelCheck: "Model ile", objectOnMannequinCheck: "Manken üzerinde", celebrityCheck: "Ünlüler", marketplaceCheck: "Pazaryeri modu",
2335
- celebrityName: "Ünlü", gender: "Cinsiyet", gender_female: "Kadın", gender_male: "Erkek", age: "Yaş", age_teen: "14-18 yaş",
2336
- age_20_25: "20-25 yaş", age_25_30: "25-30 yaş", age_30_40: "30-40 yaş", age_40_50: "40-50 yaş", nationality: "Görünüm/Etnik köken",
2337
- nat_eastern_european: "Doğu Avrupa", nat_northern_european: "İskandinav", nat_mediterranean: "Akdeniz", nat_asian: "Asya",
2338
- nat_central_asian: "Orta Asya", nat_south_asian: "Güney Asya (Hindistan)", nat_middle_eastern: "Orta Doğu", nat_caucasian: "Kafkas",
2339
- nat_african: "Afrika", nat_latin_american: "Latin Amerika", nat_indigenous: "Yerli Amerikan", nat_polynesian: "Polinezya",
2340
- nat_mixed: "Melez", bodyType: "Vücut Tipi", hairColor: "Saç Rengi", hair_black: "Siyah", hair_brown: "Kahverengi", hair_blonde: "Sarı",
2341
- hair_red: "Kızıl", hair_light_brown: "Açık Kahverengi", hairstyle: "Saç Stili", eyeColor: "Göz Rengi", eyes_brown: "Kahverengi", eyes_blue: "Mavi",
2342
- eyes_green: "Yeşil", eyes_gray: "Gri", tattoos: "Dövmeler", enableTattoos: "Dövme ekle", tattooStyle: "Stil", tattooCoverage: "Kapsama",
2343
- beard: "Sakal", enableBeard: "Sakal ekle", beardStyle: "Sakal Tipi", shotType: "Açı/Plan", shot_full: "Tam boy, dinamik açı",
2344
- shot_medium: "Belden yukarı, doğal", shot_cowboy: "'Kovboy' planı, dergi stili", shot_portrait: "Portre, etkileyici", shot_closeup: "Yakın plan (üründe)",
2345
- shot_shoes: "Ayakkabı için yakın plan (yüz yok)", objectFurnitureCheck: "Mobilya / Halılar",
2346
- viewAngle: "Görünüm", view_front: "Önden", view_back: "Arkadan", view_side: "Yandan", view_three_quarter: "Üç çeyrek", pose: "Poz",
2347
- pose_fashion: "Dinamik, sıra dışı moda pozu", pose_confident: "Kendinden emin duruş, kameraya bakış", pose_walking: "Dinamik yürüyüş, hafif hareket bulanıklığı",
2348
- pose_sitting_chair: "Sandalyede rahat oturuş", pose_leaning: "Duvara rahatça yaslanma", pose_contrapposto: "Kontraposto güçlü poz",
2349
- pose_laughing: "İçten gülüş veya tebessüm", pose_profile: "Düşünceli profil, kameradan uzağa bakış", pose_jumping: "Zıplama veya hareket halinde",
2350
- pose_reclining: "Yüzeyde zarifçe uzanma", styleLocation: "Stil / Mekan", aspectRatio: "En Boy Oranı",
2351
- modelDetailsLabel: "Kıyafet ve Detaylar (Kumaşı ve kesimi açıklayın!)", modelDetailsPlaceholder: "Kumaşı ve detayları belirtin. Örnek: Kalın dokulu siyah deri trençkot, belirgin dikişler, ağır metal aksesuarlar, ipek atkı",
2352
- additionalDirectives: "Ek direktifler", additionalDirectivesPlaceholderModel: "Örnek: Karede en son model bir telefon görünüyor, ıslak saç efekti...",
2353
- child_gender_girl: "Kız", child_gender_boy: "Erkek", child_age_infant: "6-12 aylık", child_age_toddler: "2-4 yaş", child_age_child: "5-8 yaş",
2354
- child_age_preteen: "9-12 yaş", child_shot_full: "Tam boy", child_shot_medium: "Belden yukarı", child_shot_portrait: "Portre",
2355
- childPoseAction: "Poz/Eylem", child_pose_running: "Tarlada neşeyle koşuyor", child_pose_playing: "Oyuncaklarla oynuyor", child_pose_reading: "Kitap okuyarak oturuyor",
2356
- child_pose_posing: "Fotoğraf için poz veriyor", child_pose_jumping: "Yatakta zıplıyor", childDetailsLabel: "Kıyafet ve Detaylar",
2357
- childDetailsPlaceholder: "Örnek: Yıpranmış kot tulum ve metal düğmeler, fitilli kadife gömlek",
2358
- additionalDirectivesPlaceholderChild: "Örnek: 'organic cotton' yazan infografik ekle", objectNameLabel: "Ürün Adı/Açıklaması",
2359
- objectNamePlaceholder: "Örnek: 'Noir' parfüm şişesi, 'CyberRun' spor ayakkabı, 'Classic Timepiece' saat", cosmeticsNameLabel: "Kozmetik Adı/Açıklaması",
2360
- cosmeticsNamePlaceholder: "Örnek: Kırmızı 'Ruby' ruj, 'Glow' fondöten, far paleti", styleBackground: "Stil / Arka Plan",
2361
- additionalDirectivesPlaceholderObject: "Örnek: 'new collection' infografiği ekle, ürün havada asılı duruyor (levitasyon)",
2362
- additionalDirectivesPlaceholderCosmetics: "Örnek: Cilt ışıltısına vurgu, dudakların makro çekimi", detailsVariations: "Detaylar ve Varyasyonlar",
2363
- detailsCollage: "Büyütülmüş detaylarla kolaj (kumaş, aksesuarlar)", detailsCollageObject: "Büyütülmüş detaylarla kolaj (malzeme, doku)",
2364
- detailsCollageCosmetics: "Büyütülmüş detaylarla kolaj (ürün dokusu, fırça darbeleri)", anglesCollage: "Farklı açılardan kolaj (önden, arkadan, yandan)",
2365
- anglesCollageObject: "Farklı açılardan kolaj (önden, arkadan, yandan)", variantsCollage: "Farklı varyasyonlar/renkler (karede birkaç model)",
2366
- variantsCollageObject: "Ürünün farklı varyasyonları/renkleri", variantsCollageCosmetics: "Farklı tonlar/renkler (birkaç model)",
2367
- textOverlayCheck: "Metin Ekleme", textOverlayPlaceholder: "Virgülle ayrılmış anahtar kelimeler, örnek: New Collection, 100% Cotton",
2368
- logoOverlayCheck: "Logolu", logoOverlayPlaceholder: "Logoyu açıklayın, örnek: 'Sağ alt köşede beyaz minimalist Synkris metni'",
2369
- launchBtn: "Synkris Başlat", copied_launching: "PROMPT KOPYALANDI. BAŞLATILIYOR... 🚀", copy_failed: "Kopyalanamadı. Prompt geliştirici konsolunda.",
2370
- your_prompt: "Promptunuz:", resetModelSettingsBtn: "Model ayarlarını sıfırla", resetConfirm: "Model ayarlarını varsayılana sıfırlamak istediğinize emin misiniz?",
2371
- flagship_styles: {'studio': 'Stüdyo (lüks)', 'product_focus_light': 'Pazaryeri', 'street': 'Sokak stili', 'lookbook': 'Lookbook', 'minimalism': 'Minimalizm', 'urban_loft_lifestyle': 'Loft', 'elevator_mirror_selfie': 'Asansörde selfie', 'car_interior_lifestyle': 'Araç içi', 'golden_hour_field': 'Tarlada altın saat', 'messy_bedroom_morning': 'Yatak odası', 'vintage_35mm_film': 'Vintage film', 'paparazzi_street_flash': 'Paparazzi', 'cafe_window_contemplation': 'Kafede', 'rooftop_party_sunset': 'Çatıda parti', 'bookstore_aisle_cozy': 'Kitapçı', 'custom_background_fusion': 'Özel arka plan (pro)', 'polaroid_snapshot': 'Polaroid', 'creative': 'Yaratıcı', 'retro': 'Retro', 'boho': 'Boho', 'forest_nymph': 'Orman', 'desert_expedition': 'Çöl', 'gothic': 'Gotik', 'editorial': 'Editoryal', 'film_noir': 'Kara film', 'cottagecore': 'Cottagecore', 'royalcore': 'Saray', 'solarpunk': 'Solarpunk', 'skater': 'Kaykaycı', 'vibrant_market': 'Pazar', 'cyberpunk': 'Siberpunk', 'fantasy': 'Fantezi', 'surreal_dreamscape': 'Sürrealizm', 'techwear': 'Techwear', 'home_casual': 'Ev', 'backstage': 'Kulis', 'road_trip': 'Yolculuk', 'rainy_day': 'Yağmur', 'night_flash': 'Gece (flaşlı)', 'tropical_resort': 'Tatil köyü', 'beach': 'Plaj', 'alaska_winter': 'Alaska (kış)', 'football_field': 'Futbol sahası', 'volcanic_ash_desert': 'Volkan (İzlanda)', 'salt_flats_mirage': 'Tuz gölü (Bolivya)', 'highlands_majesty': 'Dağlık bölge (İskoçya)'},
2372
- object_styles: {'studio': 'Stüdyo', 'minimalism': 'Minimalizm', 'nature': 'Doğa', 'luxe': 'Lüks', 'dark': 'Dram', 'geometric': 'Geometri', 'floating': 'Levitasyon', 'lifestyle': 'Yaşam tarzı', 'splash': 'Sıçrama', 'handmade': 'Atölye', 'alaska_winter': 'Alaska (kış)', 'football_field': 'Futbol sahası', 'volcanic_ash_desert': 'Volkan (İzlanda)', 'salt_flats_mirage': 'Tuz gölü (Bolivya)', 'highlands_majesty': 'Dağlık bölge (İskoçya)'},
2373
- female_body_types: {'standard': 'Standart', 'very_slim': 'Çok ince (model)', 'slim': 'İnce (doğal)', 'slim_busty': 'İnce ve dolgun göğüslü', 'athletic': 'Atletik', 'petite': 'Minyon', 'hourglass': 'Kum saati', 'fit_curvy': 'Sportif (kıvrımlı)', 'plus_size': 'Büyük beden', 'curvy': 'Yumuşak (kıvrımlı)', 'full_figured': 'Balık etli', 'pregnant': 'Hamile (hamile kıyafetleri için)'},
2374
- male_body_types: {'athletic': 'Atletik', 'lean and toned': 'İnce ve formda', 'muscular build': 'Kaslı', 'broad build': 'Geniş yapılı', 'slim build': 'Zayıf'},
2375
- female_hairstyles: {'long wavy hair': 'Uzun dalgalı', 'short bob cut': 'Kısa küt', 'elegant updo': 'Zarif topuz', 'straight shoulder-length hair': 'Omuz hizasında düz', 'pixie cut': 'Pixie', 'messy bun': 'Dağınık topuz', 'high ponytail': 'Yüksek at kuyruğu', 'braids': 'Örgüler', 'curly afro': 'Kıvırcık afro', 'bangs': 'Kaküllü', 'layered haircut': 'Katlı kesim', 'wearing a hijab': 'Başörtülü'},
2376
- male_hairstyles: {'short classic cut': 'Kısa klasik', 'fade haircut': 'Fade', 'slicked back hair': 'Arkaya taranmış', 'textured crop': 'Dokulu kısa kesim', 'quiff': 'Quiff', 'man bun': 'Erkek topuzu', 'buzz cut': 'Sıfır numara', 'medium-length wavy hair': 'Orta uzunlukta dalgalı', 'side part': 'Yandan ayrılmış', 'undercut': 'Altı kazınmış'},
2377
- child_hairstyles_infant: {'wispy fine hair': 'Seyrek ince saç', 'soft baby curls': 'Yumuşak bebek bukleleri', 'almost bald': 'Neredeyse kel'},
2378
- child_hairstyles_girl: {'long wavy hair': 'Uzun dalgalı', 'two pigtails': 'İki kuyruk', 'braids': 'Örgüler', 'bob cut': 'Küt kesim', 'high ponytail': 'Yüksek at kuyruğu'},
2379
- child_hairstyles_boy: {'short neat cut': 'Kısa düzenli', 'slightly messy hair': 'Hafif dağınık', 'side part': 'Yandan ayrılmış', 'textured crop': 'Dokulu kısa kesim'},
2380
- beard_styles: {"light stubble": "Hafif kirli sakal", "heavy stubble": "Yoğun kirli sakal", "short boxed beard": "Kısa kutu sakal", "full beard": "Tam sakal", "goatee": "Keçi sakalı", "van dyke": "Van Dyke", "anchor beard": "Çapa sakal"},
2381
- tattoo_styles: {"Scandinavian": "İskandinav", "Polynesian": "Polinezya", "Japanese (Irezumi)": "Japon (Irezumi)", "American Traditional": "Amerikan Geleneksel", "Blackwork": "Blackwork", "Geometric": "Geometrik", "Fine-line": "İnce çizgi", "Surrealism": "Sürrealizm", "Neo-Geleneksel": "Neo-Geleneksel"},
2382
- tattoo_coverages: {"a few small tattoos": "Birkaç küçük dövme", "sleeve on one arm": "Tek kolda kaplama", "full sleeves on both arms": "Her iki kolda kaplama", "chest piece": "Göğüs bölgesinde", "back piece": "Sırtta", "heavily tattooed": "Yoğun dövmeli", "fully covered": "Tamamen kaplı"},
2383
- celebrities_male: c_m, celebrities_female: c_f, child_celebrities_male: cc_m, child_celebrities_female: cc_f
2384
  }
2385
  };
2386
 
2387
  const fieldsToPersist = [
2388
  'gender', 'age', 'nationality', 'bodyType', 'hairColor', 'hairstyle', 'eyeColor',
2389
  'hasBeard_model', 'beardStyle_model', 'hasTattoos_model', 'tattooStyle_model', 'tattooCoverage_model',
2390
- 'shotType', 'viewAngle', 'pose',
2391
  'child_gender', 'child_age', 'child_nationality', 'child_hairColor', 'child_hairstyle', 'child_eyeColor',
2392
- 'child_shotType', 'child_viewAngle', 'child_pose',
2393
  'object_gender', 'object_age', 'object_nationality', 'object_bodyType', 'object_hairColor', 'object_hairstyle', 'object_eyeColor',
2394
  'hasBeard_object', 'beardStyle_object', 'hasTattoos_object', 'tattooStyle_object', 'tattooCoverage_object',
2395
- 'object_shotType', 'objectFurnitureCheck',
2396
  'cosmetics_gender', 'cosmetics_age', 'cosmetics_nationality', 'cosmetics_bodyType', 'cosmetics_hairColor', 'cosmetics_hairstyle', 'cosmetics_eyeColor',
2397
  'hasBeard_cosmetics', 'beardStyle_cosmetics', 'hasTattoos_cosmetics', 'tattooStyle_cosmetics', 'tattooCoverage_cosmetics',
2398
- 'cosmetics_shotType'
2399
  ];
2400
 
2401
  function saveSettings() {
@@ -2705,9 +2634,66 @@ function getPrompt() {
2705
  const isOwnModel = document.getElementById('ownModelCheck').checked;
2706
  const isCelebrity = document.getElementById('celebrityCheck').checked;
2707
  const wantsMarketplace = document.getElementById('marketplaceCheck_model').checked;
 
2708
  const styleKey = document.querySelector('#styleSelector .style-btn.active').dataset.value;
2709
  aspectRatio = document.querySelector('#aspectRatioSelectorModel .aspect-ratio-btn.active').dataset.value;
2710
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2711
  prompt = isOwnModel ? promptsData.base_prompts.model_base_own_model : promptsData.base_prompts.model_base;
2712
  const stylePrompt = promptsData.flagship_styles[styleKey];
2713
  const shotType = document.getElementById('shotType').value;
@@ -2777,9 +2763,58 @@ function getPrompt() {
2777
  } else if (currentMode === 'children') {
2778
  const isChildCelebrity = document.getElementById('childCelebrityCheck').checked;
2779
  const wantsMarketplace = document.getElementById('marketplaceCheck_children').checked;
 
2780
  const styleKey = document.querySelector('#childStyleSelector .style-btn.active').dataset.value;
2781
  aspectRatio = document.querySelector('#aspectRatioSelectorChildren .aspect-ratio-btn.active').dataset.value;
2782
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2783
  prompt = promptsData.base_prompts.children_base;
2784
  const stylePrompt = promptsData.flagship_styles[styleKey];
2785
  const clothingDetails = document.getElementById('child_details').value || "the provided clothing";
@@ -2840,11 +2875,69 @@ function getPrompt() {
2840
  const wantsMarketplace = document.getElementById('marketplaceCheck_object').checked;
2841
  const isFurniture = document.getElementById('objectFurnitureCheck') && document.getElementById('objectFurnitureCheck').checked;
2842
  const objectName = document.getElementById('object_name').value || "the product";
 
2843
  const styleKey = document.querySelector('#objectStyleSelector .style-btn.active').dataset.value;
2844
  const stylePrompt = promptsData.object_styles[styleKey];
2845
  additionalPrompt = document.getElementById('object_additional_prompt').value;
2846
  aspectRatio = document.querySelector('#aspectRatioSelectorObject .aspect-ratio-btn.active').dataset.value;
2847
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2848
  if (withModel) {
2849
  prompt = promptsData.base_prompts.model_base;
2850
  const isCelebrity = document.getElementById('objectCelebrityCheck').checked;
@@ -2930,12 +3023,49 @@ function getPrompt() {
2930
 
2931
  } else if (currentMode === 'cosmetics') {
2932
  const wantsMarketplace = document.getElementById('marketplaceCheck_cosmetics').checked;
 
2933
  const cosmeticsName = document.getElementById('cosmetics_name').value || "the cosmetic product";
2934
  const styleKey = document.querySelector('#cosmeticsStyleSelector .style-btn.active').dataset.value;
2935
  const stylePrompt = promptsData.object_styles[styleKey];
2936
  additionalPrompt = document.getElementById('cosmetics_additional_prompt').value;
2937
  aspectRatio = document.querySelector('#aspectRatioSelectorCosmetics .aspect-ratio-btn.active').dataset.value;
2938
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2939
  prompt = promptsData.base_prompts.cosmetics_base;
2940
  const isCelebrity = document.getElementById('cosmeticsCelebrityCheck').checked;
2941
 
@@ -3001,8 +3131,6 @@ function getPrompt() {
3001
  if (additionalPrompt) {
3002
  prompt += `\\n\\n**ADDITIONAL ARTISTIC DIRECTIVES:** ${additionalPrompt}`;
3003
  }
3004
-
3005
- prompt += `\\n\\n**QUALITY BOOST:** Ensure final image is in pristine 4K resolution, ultra-detailed, masterpiece, highly optimized texture rendering.`;
3006
 
3007
  return `${prompt} ${aspectRatio}`.trim();
3008
  }
@@ -3025,9 +3153,8 @@ async function processAndOpen() {
3025
  btn.querySelector('span[data-lang-key]').innerHTML = langData.copied_launching;
3026
 
3027
  setTimeout(() => {
3028
- let targetUrl = 'https://gemini.google.com/share/758ad1a3ecd8';
3029
- document.getElementById('synkrisIframe').src = targetUrl;
3030
- document.getElementById('iframeOverlay').style.display = 'flex';
3031
  setTimeout(() => {
3032
  btn.style.background = "";
3033
  btn.querySelector('span[data-lang-key]').innerHTML = originalText;
@@ -3036,7 +3163,7 @@ async function processAndOpen() {
3036
  } catch (err) {
3037
  console.error('Failed to copy: ', err);
3038
  alert(langData.copy_failed);
3039
- console.log(`${langData.your_prompt}\n`, cleanPrompt);
3040
  }
3041
  }
3042
 
@@ -3437,4 +3564,4 @@ if __name__ == '__main__':
3437
  backup_thread = threading.Thread(target=periodic_backup, daemon=True)
3438
  backup_thread.start()
3439
  port = int(os.environ.get('PORT', 7860))
3440
- app.run(debug=False, host='0.0.0.0', port=port)
 
 
1
  import os
2
  import io
3
  import base64
 
737
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
738
  <style>
739
  :root {
740
+ --bg: #121212;
741
+ --card-bg: #1E1E1E;
742
  --primary: #c8ff00;
743
  --primary-hover: #b8e600;
744
  --primary-gradient: linear-gradient(45deg, #d4ff33, #aaff00);
745
  --text: #f0f0f0;
746
  --text-secondary: #a0a0a0;
747
+ --border: #333333;
748
+ --input-bg: #2a2a2a;
749
  --danger: #ff4d4d;
750
  }
751
 
 
775
  padding: 30px 35px;
776
  border-radius: 24px;
777
  border: 1px solid var(--border);
778
+ box-shadow: 0 20px 60px -15px rgba(200, 255, 0, 0.08);
779
  animation: fadeIn 0.6s cubic-bezier(0.25, 1, 0.5, 1);
780
  }
781
 
 
798
  background: var(--primary-gradient);
799
  -webkit-background-clip: text;
800
  -webkit-text-fill-color: transparent;
801
+ text-shadow: 0 0 30px rgba(200, 255, 0, 0.3);
802
  }
803
 
804
  p.subtitle {
 
835
  background: var(--primary);
836
  color: #000;
837
  border-color: var(--primary);
838
+ box-shadow: 0 0 10px rgba(200, 255, 0, 0.3);
839
  }
840
 
841
  .mode-selector {
 
865
  .mode-btn.active {
866
  background: var(--primary);
867
  color: #000;
868
+ box-shadow: 0 5px 20px -5px rgba(200, 255, 0, 0.4);
869
  transform: translateY(-1px);
870
  }
871
 
 
921
  select, textarea {
922
  padding: 15px;
923
  border: 1px solid var(--border);
924
+ border-radius: 10px;
925
  font-size: 0.95rem;
926
  font-weight: 500;
927
  background-color: var(--input-bg);
 
948
 
949
  select:focus, textarea:focus {
950
  border-color: var(--primary);
951
+ box-shadow: 0 0 15px rgba(200, 255, 0, 0.2);
952
  }
953
 
954
  textarea {
 
1012
  }
1013
 
1014
  .style-btn:hover { border-color: var(--primary); color: var(--text); transform: translateY(-2px); }
1015
+ .style-btn.active { background-color: var(--primary); color: #000; border-color: var(--primary); font-weight: 700; transform: translateY(-2px); box-shadow: 0 0 10px rgba(200, 255, 0, 0.2); }
1016
 
1017
  .aspect-ratio-grid {
1018
  display: grid;
 
1039
  }
1040
  .aspect-ratio-btn .preview { background: #444; border-radius: 4px; transition: background-color 0.3s ease; }
1041
  .aspect-ratio-btn:hover { border-color: var(--primary); color: var(--text); transform: translateY(-2px); }
1042
+ .aspect-ratio-btn.active { background-color: var(--primary); color: #000; border-color: var(--primary); transform: translateY(-2px); box-shadow: 0 0 10px rgba(200, 255, 0, 0.2); }
1043
  .aspect-ratio-btn.active .preview { background: #000; }
1044
 
1045
  .checkbox-group {
 
1124
  margin-left: 8px;
1125
  vertical-align: middle;
1126
  display: inline-block;
1127
+ animation: pulse 1.5s infinite;
1128
  }
1129
 
1130
  .style-btn .badge-new {
 
1135
  font-size: 0.65em;
1136
  }
1137
 
1138
+ @keyframes pulse { 0% { opacity: 1; } 50% { opacity: 0.7; } 100% { opacity: 1; } }
1139
+
1140
  .button-link {
1141
  background: none;
1142
  border: 1px solid var(--border);
 
1192
  opacity: 1;
1193
  }
1194
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1195
  @media (max-width: 700px) {
1196
  body { padding: 10px; }
1197
  .container { padding: 20px 15px; }
 
1214
  <button id="lang-ru" onclick="setLanguage('ru')">RU</button>
1215
  <button id="lang-kz" onclick="setLanguage('kz')">KZ</button>
1216
  <button id="lang-kg" onclick="setLanguage('kg')">KG</button>
 
1217
  </div>
1218
  </div>
1219
  <h1><span>Synkris</span></h1>
 
1241
  <input type="checkbox" id="celebrityCheck">
1242
  <label for="celebrityCheck" data-lang-key="celebrityCheck">Знаменитости</label>
1243
  </div>
1244
+ <div class="checkbox-item">
1245
+ <input type="checkbox" id="wan27Check_model">
1246
+ <label for="wan27Check_model" data-lang-key="wan27Check">Wan 2.7 (Короткий промпт)</label>
1247
+ <span class="tooltip-container">
1248
+ <i class="fas fa-question-circle"></i>
1249
+ <span class="tooltip-text" data-lang-key="wan27Tooltip">вы можете отметить этот параметр и пользоваться новым видом качества , в поле выбора качества в поиске напишите "27" и у вас выйдет wan 2.7 image pro</span>
1250
+ </span>
1251
+ </div>
1252
  </div>
1253
  </div>
1254
 
 
1489
  <input type="checkbox" id="childCelebrityCheck">
1490
  <label for="childCelebrityCheck" data-lang-key="celebrityCheck">Знаменитости</label>
1491
  </div>
1492
+ <div class="checkbox-item">
1493
+ <input type="checkbox" id="wan27Check_children">
1494
+ <label for="wan27Check_children" data-lang-key="wan27Check">Wan 2.7 (Короткий промпт)</label>
1495
+ <span class="tooltip-container">
1496
+ <i class="fas fa-question-circle"></i>
1497
+ <span class="tooltip-text" data-lang-key="wan27Tooltip">вы можете отметить этот параметр и пользоваться новым видом качества , в поле выбора качества в поиске напишите "27" и у вас выйдет wan 2.7 image pro</span>
1498
+ </span>
1499
+ </div>
1500
  </div>
1501
  </div>
1502
  <div id="childCelebrityParamsContainer" class="celebrity-grid">
 
1699
  <input type="checkbox" id="objectCelebrityCheck">
1700
  <label for="objectCelebrityCheck" data-lang-key="celebrityCheck">Знаменитости</label>
1701
  </div>
1702
+ <div class="checkbox-item">
1703
+ <input type="checkbox" id="wan27Check_object">
1704
+ <label for="wan27Check_object" data-lang-key="wan27Check">Wan 2.7 (Короткий промпт)</label>
1705
+ <span class="tooltip-container">
1706
+ <i class="fas fa-question-circle"></i>
1707
+ <span class="tooltip-text" data-lang-key="wan27Tooltip">вы можете отметить этот параметр и пользоваться новым видом качества , в поле выбора качества в поиске напишите "27" и у вас выйдет wan 2.7 image pro</span>
1708
+ </span>
1709
+ </div>
1710
  <div class="checkbox-item">
1711
  <input type="checkbox" id="objectFurnitureCheck">
1712
  <label for="objectFurnitureCheck" data-lang-key="objectFurnitureCheck">Мебель / Ковры</label>
 
1922
  <input type="checkbox" id="cosmeticsCelebrityCheck">
1923
  <label for="cosmeticsCelebrityCheck" data-lang-key="celebrityCheck">Знаменитости</label>
1924
  </div>
1925
+ <div class="checkbox-item">
1926
+ <input type="checkbox" id="wan27Check_cosmetics">
1927
+ <label for="wan27Check_cosmetics" data-lang-key="wan27Check">Wan 2.7 (Короткий промпт)</label>
1928
+ <span class="tooltip-container">
1929
+ <i class="fas fa-question-circle"></i>
1930
+ <span class="tooltip-text" data-lang-key="wan27Tooltip">вы можете отметить этот параметр и пользоваться новым видом качества , в поле выбора качества в поиске напишите "27" и у вас выйдет wan 2.7 image pro</span>
1931
+ </span>
1932
+ </div>
1933
  </div>
1934
  </div>
1935
 
 
2132
  </form>
2133
  </div>
2134
 
 
 
 
 
 
 
 
 
2135
  <script>
2136
  let currentMode = 'model';
2137
  const envKeyword = {{ keyword|tojson|safe }};
2138
  const promptsData = {{ prompts_data|tojson|safe }};
2139
 
2140
  const c_m = {"Adam Driver":"Адам Драйвер","Al Pacino":"Аль Пачино","Anthony Hopkins":"Энтони Хопкинс","Antonio Banderas":"Антонио Бандерас","Arnold Schwarzenegger":"Арнольд Шварценеггер","Bad Bunny":"Bad Bunny","Benedict Cumberbatch":"Бенедикт Камбербэтч","Brad Pitt":"Брэд Питт","Bradley Cooper":"Брэдли Купер","Bruce Willis":"Брюс Уиллис","Channing Tatum":"Ченнинг Татум","Chris Evans":"Крис Эванс","Chris Hemsworth":"Крис Хемсворт","Chris Pratt":"Крис Прэтт","Christian Bale":"Кристиан Бэйл","Cillian Murphy":"Киллиан Мёрфи","Clint Eastwood":"Клинт Иствуд","Colin Farrell":"Колин Фаррелл","Daniel Craig":"Дэниел Крейг","Danny DeVito":"Дэнни ДеВито","Denzel Washington":"Дензел Вашингтон","Donald Trump":"Дональд Трамп","Dwayne Johnson":"Дуэйн Джонсон","Eddie Murphy":"Эдди Мерфи","Elon Musk":"Илон Маск","George Clooney":"Джордж Клуни","Harry Styles":"Гарри Стайлс","Henry Cavill":"Генри Кавилл","Hugh Jackman":"Хью Джекман","Idris Elba":"Идрис Эльба","Jackie Chan":"Джеки Чан","Jake Gyllenhaal":"Джейк Джилленхол","Jason Momoa":"Джейсон Момоа","Jason Statham":"Джейсон Стейтем","Javier Bardem":"Хавьер Бардем","Jeff Goldblum":"Джефф Голдблюм","Joaquin Phoenix":"Хоакин Феникс","Joe Rogan":"Джо Роган","John Travolta":"Джон Траволта","Johnny Depp":"Джонни Депп","Jude Law":"Джуд Лоу","Kanye West":"Канье Уэст","Keanu Reeves":"Киану Ривз","Kevin Hart":"Кевин Харт","Leonardo DiCaprio":"Леонардо Ди Каприо","Liam Neeson":"Лиам Нисон","Mads Mikkelsen":"Мадс Миккельсен","Mark Zuckerberg":"Марк Цукерберг","Matt Damon":"Мэтт Дэймон","Matthew McConaughey":"Мэттью МакКонахи","Mel Gibson":"Мэл Гибсон","Michael B. Jordan":"Майкл Б. Джордан","Morgan Freeman":"Морган Фриман","Nicolas Cage":"Николас Кейдж","Oscar Isaac":"Оскар Айзек","Robert De Niro":"Роберт Де Ниро","Robert Downey Jr.":"Роберт Дауни-младший","Ryan Gosling":"Райан Гослинг","Ryan Reynolds":"Райан Рейнольдс","Samuel L. Jackson":"Сэмюэл Л. Джексон","Sylvester Stallone":"Сильвестр Сталлоне","The Weeknd":"The Weeknd","Timothée Chalamet":"Тимоти Шаламе","Tom Cruise":"Том Круз","Tom Hanks":"Том Хэнкс","Tom Hardy":"Том Харди","Tom Holland":"Том Холланд","Travis Scott":"Трэвис Скотт","Vin Diesel":"Вин Дизель","Will Smith":"Уилл Смит","Willem Dafoe":"Уиллем Дефо","Woody Harrelson":"Вуди Харрельсон","Cristiano Ronaldo":"Криштиану Роналду","Lionel Messi":"Лионель Месси","Neymar Jr.":"Неймар","Conor McGregor":"Конор Макгрегор","Khabib Nurmagomedov":"Хабиб Нурмагомедов","Jon Jones":"Джон Джонс","Israel Adesanya":"Исраэль Адесанья","Kamaru Usman":"Камару Усман","Francis Ngannou":"Фрэнсис Нганну","Islam Makhachev":"Ислам Махачев","Khamzat Chimaev":"Хамзат Чимаев","Sean O'Malley":"Шон О'Мэлли","Shavkat Rakhmonov":"Шавкат Рахмонов","Alex Pereira":"Алекс Перейра","Jorge Masvidal":"Хорхе Масвидаль"};
2141
+ const c_f = {"Adriana Lima":"Адриана Лима","Alexandra Daddario":"Александра Даддарио","Amanda Seyfried":"Аманда Сейфрид","Ana de Armas":"Ана де Армас","Angelina Jolie":"Анджелина Джоли","Anne Hathaway":"Энн Хэтэуэй","Anya Taylor-Joy":"Аня Тейлор-Джой","Ariana Grande":"Ариана Гранде","Bella Hadid":"Белла Хадид","Beyonce":"Бейонсе","Billie Eilish":"Билли Айлиш","Blake Lively":"Блейк Лайвли","Cameron Diaz":"Кэмерон Диаз","Cara Delevingne":"Кара Делевинь","Cate Blanchett":"Кейт Бланшетт","Charlize Theron":"Шарлиз Терон","Christina Hendricks":"Кристина Хендрикс","Dakota Johnson":"Дакота Джонсон","Doja Cat":"Doja Cat","Dua Lipa":"Дуа Липа","Elizabeth Olsen":"Элизабет Олсен","Emily Ratajkowski":"Эмили Ратаковски","Emma Stone":"Эмма Стоун","Emma Watson":"Эмма Уотсон","Eva Green":"Ева Грин","Eva Mendes":"Ева Мендес","Florence Pugh":"Флоренс Пью","Gal Gadot":"Галь Гадот","Gigi Hadid":"Джиджи Хадид","Gisele Bündchen":"Жизель Бюндхен","Hailey Bieber":"Хейли Бибер","Halle Berry":"Хэлли Берри","Irina Shayk":"Ирина Шейк","Jenna Ortega":"Дженна Ортега","Jennifer Aniston":"Дженнифер Энистон","Jennifer Connelly":"Дженнифер Коннелли","Jennifer Lawrence":"Дженнифер Лоуренс","Jennifer Lopez":"Дженнифер Лопес","Jessica Alba":"Джессика Альба","Jessica Chastain":"Джессика Честейн","Julia Roberts":"Джулия Робертс","Kate Beckinsale":"Кейт Бекинсейл","Keira Knightley":"Кира Найтли","Kendall Jenner":"Кендалл Дженнер","Kim Kardashian":"Ким Кардашьян","Kristen Stewart":"Кристен Стюарт","Kylie Jenner":"Кайли Дженнер","Lady Gaga":"Леди Гага","Margot Robbie":"Марго Робби","Megan Fox":"Меган Фокс","Mila Kunis":"Мила Кунис","Monica Bellucci":"Моника Беллуччи","Natalie Portman":"Натали Портман","Nicole Kidman":"Николь Кидман","Olivia Wilde":"Оливия Уайлд","Penélope Cruz":"Пенелопа Крус","Rihanna":"Рианна","Salma Hayek":"Сальма Хайек","Scarlett Johansson":"Скарлетт Йоханссон","Selena Gomez":"Селена Гомес","Shakira":"Шакира","Sydney Sweeney":"Сидни Суини","Taylor Swift":"Тейлор Свифт","Zendaya":"Зендая","Zoe Kravitz":"Зои Кравиц","Zoe Saldana":"Зои Салдана"};
2142
  const cc_m = {"Caleb McLaughlin (Stranger Things)":"Калеб Маклафлин","Daniel Radcliffe (Harry Potter)":"Дэниел Рэдклифф","Finn Wolfhard (Stranger Things)":"Финн Вулфхард","Gaten Matarazzo (Stranger Things)":"Гейте�� Матараццо","Iain Armitage (Young Sheldon)":"Иэн Армитидж","Jacob Tremblay":"Джейкоб Трамбле","Jaden Smith":"Джейден Смит","Macaulay Culkin (Home Alone)":"Маколей Калкин","Noah Schnapp (Stranger Things)":"Ноа Шнапп","Walker Scobell (The Adam Project)":"Уокер Скобелл"};
2143
  const cc_f = {"Dakota Fanning":"Дакота Фаннинг","Elle Fanning":"Эль Фаннинг","Emma Watson (Harry Potter)":"Эмма Уотсон","Mckenna Grace":"Маккенна Грейс","Millie Bobby Brown (Stranger Things)":"Милли Бобби Браун","North West":"Норт Уэст","Sadie Sink (Stranger Things)":"Сэди Синк","Storm Reid (A Wrinkle in Time)":"Сторм Рид","Suri Cruise":"Сури Круз"};
2144
 
 
2184
  logoOverlayCheck: "С логотипом", logoOverlayPlaceholder: "Опишите логотип, например: 'белый минималистичный текст Synkris в правом нижнем углу'",
2185
  launchBtn: "Launch Synkris", copied_launching: "ПРОМПТ СКОПИРОВАН. ЗАПУСК... 🚀", copy_failed: "Не удалось скопировать. Промпт в консоли разработчика.",
2186
  your_prompt: "Ваш промпт:", resetModelSettingsBtn: "Сбросить настройки модели", resetConfirm: "Вы уверены, что хотите сбросить настройки модели до значений по умолчанию?",
2187
+ wan27Check: "Wan 2.7 (Короткий промпт)", wan27Tooltip: 'вы можете отметить этот параметр и пользоваться новым видом качества , в поле выбора качества в поиске напишите "27" и у вас выйдет wan 2.7 image pro',
2188
  flagship_styles: {'studio': 'Студия (люкс)', 'product_focus_light': 'Маркетплейс', 'street': 'Стрит-стайл', 'lookbook': 'Лукбук', 'minimalism': 'Минимализм', 'urban_loft_lifestyle': 'Лофт', 'elevator_mirror_selfie': 'Селфи в лифте', 'car_interior_lifestyle': 'В салоне авто', 'golden_hour_field': 'Золотой час в поле', 'messy_bedroom_morning': 'Утро в спальне', 'vintage_35mm_film': 'Винтажная пленка', 'paparazzi_street_flash': 'Папарацци-вспышка', 'cafe_window_contemplation': 'У окна в кафе', 'rooftop_party_sunset': 'Вечеринка на крыше', 'bookstore_aisle_cozy': 'Книжный магазин', 'custom_background_fusion': 'Свой фон (профи)', 'polaroid_snapshot': 'Полароид', 'creative': 'Креатив', 'retro': 'Ретро', 'boho': 'Бохо', 'forest_nymph': 'Лес', 'desert_expedition': 'Пустыня', 'gothic': 'Готика', 'editorial': 'Эдиториал', 'film_noir': 'Нуар', 'cottagecore': 'Коттеджкор', 'royalcore': 'Дворец', 'solarpunk': 'Соларпанк', 'skater': 'Скейтер', 'vibrant_market': 'Рынок', 'cyberpunk': 'Киберпанк', 'fantasy': 'Фэнтези', 'surreal_dreamscape': 'Сюрреализм', 'techwear': 'Techwear', 'home_casual': 'Дом', 'backstage': 'Бэкстейдж', 'road_trip': 'Роуд-трип', 'rainy_day': 'Дождь', 'night_flash': 'Ночь (вспышка)', 'tropical_resort': 'Курорт', 'beach': 'Пляж', 'alaska_winter': 'Аляска (зима)', 'football_field': 'Футбольное поле', 'volcanic_ash_desert': 'Вулкан (Исландия)', 'salt_flats_mirage': 'Солончак (Боливия)', 'highlands_majesty': 'Нагорье (Шотландия)'},
2189
  object_styles: {'studio': 'Студия', 'minimalism': 'Минимализм', 'nature': 'Природа', 'luxe': 'Люкс', 'dark': 'Драма', 'geometric': 'Геометрия', 'floating': 'Левитация', 'lifestyle': 'Лайфстайл', 'splash': 'Всплеск', 'handmade': 'Мастерская', 'alaska_winter': 'Аляска (зима)', 'football_field': 'Футбольное поле', 'volcanic_ash_desert': 'Вулкан (Исландия)', 'salt_flats_mirage': 'Солончак (Боливия)', 'highlands_majesty': 'Нагорье (Шотландия)'},
2190
  female_body_types: {'standard': 'Стандартное', 'very_slim': 'Очень стройное (модель)', 'slim': 'Стройное (натуральное)', 'slim_busty': 'Стройное с пышной грудью', 'athletic': 'Атлетичное', 'petite': 'Миниатюрное', 'hourglass': 'Песочные часы', 'fit_curvy': 'Спортивное (curvy)', 'plus_size': 'Пышные', 'curvy': 'Мягкое (curvy)', 'full_figured': 'Плюс-сайз', 'pregnant': 'Беременная (одежда для беременных)'},
 
2240
  logoOverlayCheck: "Логотиппен", logoOverlayPlaceholder: "Логотипті сипаттаңыз, мысалы: 'оң жақ төменгі бұрыштағы Synkris ақ минималистік мәтіні'",
2241
  launchBtn: "Synkris іске қосу", copied_launching: "ПРОМПТ КӨШІРІЛДІ. ІСКЕ ҚОСУ... 🚀", copy_failed: "Көшіру мүмкін болмады. Промпт әзірлеуші консолінде.",
2242
  your_prompt: "Сіздің промптыңыз:", resetModelSettingsBtn: "Модель баптауларын қалпына келтіру", resetConfirm: "Модель баптауларын әдепкі мәндерге қайтарғыңыз келетініне сенімдісіз бе?",
2243
+ wan27Check: "Wan 2.7 (Қысқа промпт)", wan27Tooltip: 'Бұл параметрді белгілеп, жаңа сапа түрін пайдалана аласыз, іздеу жолағына "27" деп жазыңыз, сонда wan 2.7 image pro шығады',
2244
  flagship_styles: {'studio': 'Студия (люкс)', 'product_focus_light': 'Маркетплейс', 'street': 'Стрит-стайл', 'lookbook': 'Лукбук', 'minimalism': 'Минимализм', 'urban_loft_lifestyle': 'Лофт', 'elevator_mirror_selfie': 'Лифттегі селфи', 'car_interior_lifestyle': 'Авто салонында', 'golden_hour_field': 'Алтын сағат', 'messy_bedroom_morning': 'Жатын бөлме', 'vintage_35mm_film': 'Винтаж пленка', 'paparazzi_street_flash': 'Папарацци', 'cafe_window_contemplation': 'Кафеде', 'rooftop_party_sunset': 'Шатырдағы кеш', 'bookstore_aisle_cozy': 'Кітап дүкені', 'custom_background_fusion': 'Өз фоныңыз (профи)', 'polaroid_snapshot': 'Полароид', 'creative': 'Креатив', 'retro': 'Ретро', 'boho': 'Бохо', 'forest_nymph': 'Орман', 'desert_expedition': 'Шөл', 'gothic': 'Готика', 'editorial': 'Эдиториал', 'film_noir': 'Нуар', 'cottagecore': 'Коттеджкор', 'royalcore': 'Сарай', 'solarpunk': 'Соларпанк', 'skater': 'Скейтер', 'vibrant_market': 'Базар', 'cyberpunk': 'Киберпанк', 'fantasy': 'Фэнтези', 'surreal_dreamscape': 'Сюрреализм', 'techwear': 'Techwear', 'home_casual': 'Үй', 'backstage': 'Бэкстейдж', 'road_trip': 'Роуд-трип', 'rainy_day': 'Жаңбыр', 'night_flash': 'Түн (жарқыл)', 'tropical_resort': 'Курорт', 'beach': 'Жағажай', 'alaska_winter': 'Аляска (қыс)', 'football_field': 'Футбол алаңы', 'volcanic_ash_desert': 'Жанартау (Исландия)', 'salt_flats_mirage': 'Тұзды алқап (Боливия)', 'highlands_majesty': 'Таулы аймақ (Шотландия)'},
2245
  object_styles: {'studio': 'Студия', 'minimalism': 'Минимализм', 'nature': 'Табиғат', 'luxe': 'Люкс', 'dark': 'Драма', 'geometric': 'Геометрия', 'floating': 'Левитация', 'lifestyle': 'Лайфстайл', 'splash': 'Шашырау', 'handmade': 'Шеберхана', 'alaska_winter': 'Аляска (қыс)', 'football_field': 'Футбол алаңы', 'volcanic_ash_desert': 'Жанартау (Исландия)', 'salt_flats_mirage': 'Тұзды алқап (Боливия)', 'highlands_majesty': 'Таулы аймақ (Шотландия)'},
2246
  female_body_types: {'standard': 'Стандартты', 'very_slim': 'Өте сымбатты (модель)', 'slim': 'Сымбатты (табиғи)', 'slim_busty': 'Сымбатты, үлкен кеуделі', 'athletic': 'Атлетикалық', 'petite': 'Кішкентай', 'hourglass': 'Құм сағат', 'fit_curvy': 'Спорттық (curvy)', 'plus_size': 'Толық', 'curvy': 'Жұмсақ (curvy)', 'full_figured': 'Плюс-сайз', 'pregnant': 'Жүкті (жүкті әйелдерге арналған киім)'},
 
2296
  logoOverlayCheck: "Логотип менен", logoOverlayPlaceholder: "Логотипти сүрөттөп бериңиз, мисалы: 'оң жак төмөнкү бурчтагы Synkris ак минималисттик тексти'",
2297
  launchBtn: "Synkris ишке киргизүү", copied_launching: "ПРОМПТ КӨЧҮРҮЛДҮ. ИШКЕ КИРГИЗҮҮ... 🚀", copy_failed: "Көчүрүү мүмкүн болбоду. Промпт иштеп чыгуучунун консолунда.",
2298
  your_prompt: "Сиздин промптуңуз:", resetModelSettingsBtn: "Моделдин жөндөөлөрүн баштапкы абалга келтирүү", resetConfirm: "Моделдин жөндөөлөрүн баштапкы абалга келтирүүнү каалайсызбы?",
2299
+ wan27Check: "Wan 2.7 (Кыска промпт)", wan27Tooltip: 'Бул параметрди белгилеп, жаңы сапат түрүн колдоно аласыз, издөө тилкесине "27" деп жазыңыз, ошондо wan 2.7 image pro чыгат',
2300
  flagship_styles: {'studio': 'Студия (люкс)', 'product_focus_light': 'Маркетплейс', 'street': 'Стрит-стайл', 'lookbook': 'Лукбук', 'minimalism': 'Минимализм', 'urban_loft_lifestyle': 'Лофт', 'elevator_mirror_selfie': 'Лифттегі селфи', 'car_interior_lifestyle': 'Авто салонунда', 'golden_hour_field': 'Алтын саат', 'messy_bedroom_morning': 'Уктоочу бөлмө', 'vintage_35mm_film': 'Винтаж пленкасы', 'paparazzi_street_flash': 'Папарацци', 'cafe_window_contemplation': 'Кафеде', 'rooftop_party_sunset': 'Чатырдагы кече', 'bookstore_aisle_cozy': 'Китеп дүкөнү', 'custom_background_fusion': 'Өз фонуңуз (профи)', 'polaroid_snapshot': 'Полароид', 'creative': 'Креатив', 'retro': 'Ретро', 'boho': 'Бохо', 'forest_nymph': 'Токой', 'desert_expedition': 'Чөл', 'gothic': 'Готика', 'editorial': 'Эдиториал', 'film_noir': 'Нуар', 'cottagecore': 'Коттеджкор', 'royalcore': 'Сарай', 'solarpunk': 'Соларпанк', 'skater': 'Скейтер', 'vibrant_market': 'Базар', 'cyberpunk': 'Киберпанк', 'fantasy': 'Фэнтези', 'surreal_dreamscape': 'Сюрреализм', 'techwear': 'Techwear', 'home_casual': 'Үй', 'backstage': 'Бэкстейдж', 'road_trip': 'Роуд-трип', 'rainy_day': 'Жамгыр', 'night_flash': 'Түн (жарк)', 'tropical_resort': 'Курорт', 'beach': 'Пляж', 'alaska_winter': 'Аляска (кыш)', 'football_field': 'Футбол талаасы', 'volcanic_ash_desert': 'Вулкан (Исландия)', 'salt_flats_mirage': 'Туздуу түздүк (Боливия)', 'highlands_majesty': 'Тоолуу аймак (Шотландия)'},
2301
  object_styles: {'studio': 'Студия', 'minimalism': 'Минимализм', 'nature': 'Жаратылыш', 'luxe': 'Люкс', 'dark': 'Драма', 'geometric': 'Геометрия', 'floating': 'Левитация', 'lifestyle': 'Лайфстайл', 'splash': 'Чачыроо', 'handmade': 'Устакана', 'alaska_winter': 'Аляска (кыш)', 'football_field': 'Футбол талаасы', 'volcanic_ash_desert': 'Вулкан (Исландия)', 'salt_flats_mirage': 'Туздуу түздүк (Боливия)', 'highlands_majesty': 'Тоолуу аймак (Шотландия)'},
2302
  female_body_types: {'standard': 'Стандарттуу', 'very_slim': 'Абдан сымбаттуу (модель)', 'slim': 'Сымбаттуу (табигый)', 'slim_busty': 'Сымбаттуу, чоң төштүү', 'athletic': 'Атлетикалык', 'petite': 'Кичинекей', 'hourglass': 'Кум саат', 'fit_curvy': 'Спорттук (curvy)', 'plus_size': 'Толук', 'curvy': 'Жумшак (curvy)', 'full_figured': 'Плюс-сайз', 'pregnant': 'Кош бойлуу (кош бойлуулар үчүн кийим)'},
 
2310
  tattoo_styles: {"Scandinavian": "Скандинавиялык", "Polynesian": "Полинезиялык", "Japanese (Irezumi)": "Япон (Ирэдзуми)", "American Traditional": "Америкалык салттуу", "Blackwork": "Блэкворк", "Geometric": "Геометриялык", "Fine-line": "Ичке сызык", "Surrealism": "Сюрреализм", "Neo-Traditional": "Нео-салттуу"},
2311
  tattoo_coverages: {"a few small tattoos": "Бир нече кичинекей", "sleeve on one arm": "Бир колдогу жең", "full sleeves on both arms": "Эки колдогу жеңдер", "chest piece": "Көкүрөктө", "back piece": "Аркада", "heavily tattooed": "Көп чийилген", "fully covered": "Толугу менен капталган"},
2312
  celebrities_male: c_m, celebrities_female: c_f, child_celebrities_male: cc_m, child_celebrities_female: cc_f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2313
  }
2314
  };
2315
 
2316
  const fieldsToPersist = [
2317
  'gender', 'age', 'nationality', 'bodyType', 'hairColor', 'hairstyle', 'eyeColor',
2318
  'hasBeard_model', 'beardStyle_model', 'hasTattoos_model', 'tattooStyle_model', 'tattooCoverage_model',
2319
+ 'shotType', 'viewAngle', 'pose', 'wan27Check_model',
2320
  'child_gender', 'child_age', 'child_nationality', 'child_hairColor', 'child_hairstyle', 'child_eyeColor',
2321
+ 'child_shotType', 'child_viewAngle', 'child_pose', 'wan27Check_children',
2322
  'object_gender', 'object_age', 'object_nationality', 'object_bodyType', 'object_hairColor', 'object_hairstyle', 'object_eyeColor',
2323
  'hasBeard_object', 'beardStyle_object', 'hasTattoos_object', 'tattooStyle_object', 'tattooCoverage_object',
2324
+ 'object_shotType', 'wan27Check_object', 'objectFurnitureCheck',
2325
  'cosmetics_gender', 'cosmetics_age', 'cosmetics_nationality', 'cosmetics_bodyType', 'cosmetics_hairColor', 'cosmetics_hairstyle', 'cosmetics_eyeColor',
2326
  'hasBeard_cosmetics', 'beardStyle_cosmetics', 'hasTattoos_cosmetics', 'tattooStyle_cosmetics', 'tattooCoverage_cosmetics',
2327
+ 'cosmetics_shotType', 'wan27Check_cosmetics'
2328
  ];
2329
 
2330
  function saveSettings() {
 
2634
  const isOwnModel = document.getElementById('ownModelCheck').checked;
2635
  const isCelebrity = document.getElementById('celebrityCheck').checked;
2636
  const wantsMarketplace = document.getElementById('marketplaceCheck_model').checked;
2637
+ const isWan27 = document.getElementById('wan27Check_model') && document.getElementById('wan27Check_model').checked;
2638
  const styleKey = document.querySelector('#styleSelector .style-btn.active').dataset.value;
2639
  aspectRatio = document.querySelector('#aspectRatioSelectorModel .aspect-ratio-btn.active').dataset.value;
2640
 
2641
+ if (isWan27) {
2642
+ const clothingDetails = document.getElementById('model_details').value || "highly detailed clothing";
2643
+ const additionalPromptWan = document.getElementById('additional_prompt').value;
2644
+ const pose = document.getElementById('pose').value;
2645
+ const shotType = document.getElementById('shotType').value;
2646
+ const viewAngle = document.getElementById('viewAngle').value;
2647
+
2648
+ let shortPrompt = "High-end fashion editorial photography. ";
2649
+
2650
+ if (isCelebrity) {
2651
+ shortPrompt += "Model: flawless lookalike of " + document.getElementById('celebrityName').value + ". ";
2652
+ } else if (!isOwnModel) {
2653
+ const age = document.getElementById('age').value;
2654
+ const gender = document.getElementById('gender').value;
2655
+ const nationality = document.getElementById('nationality').value.toLowerCase();
2656
+ const bodyType = document.getElementById('bodyType').value;
2657
+ const hairColor = document.getElementById('hairColor').value;
2658
+ const hairstyle = document.getElementById('hairstyle').value;
2659
+ const eyeColor = document.getElementById('eyeColor').value;
2660
+
2661
+ shortPrompt += `Model: ${age} ${nationality} ${gender}, ${bodyType} body, ${hairColor} ${hairstyle}, ${eyeColor}. `;
2662
+ if (document.getElementById('bodyType').value === 'pregnant') shortPrompt += "(pregnant) ";
2663
+ if (gender === 'male' && document.getElementById('hasBeard_model').checked) shortPrompt += "With a " + document.getElementById('beardStyle_model').value + ". ";
2664
+ if (document.getElementById('hasTattoos_model').checked) shortPrompt += "With tattoos (" + document.getElementById('tattooCoverage_model').value + ", " + document.getElementById('tattooStyle_model').value + " style). ";
2665
+ } else {
2666
+ shortPrompt += "Model: Human model. ";
2667
+ }
2668
+
2669
+ shortPrompt += `Wearing: ${clothingDetails}. `;
2670
+ shortPrompt += `Shot as ${shotType}, from ${viewAngle}, posing: ${pose}. `;
2671
+ shortPrompt += `Setting: ${styleKey.replace(/_/g, ' ')} environment. Cinematic studio lighting, ultra-detailed masterpiece. FLAWLESS ANATOMY: Perfect human body, exactly two arms, two legs, perfect hands and fingers, no deformations. `;
2672
+
2673
+ if (aspectRatio.includes("9:16")) shortPrompt += "Strictly vertical 9:16 composition, perfectly framed for vertical portrait format. ";
2674
+ else if (aspectRatio.includes("16:9")) shortPrompt += "Cinematic horizontal 16:9 composition perfectly framed. ";
2675
+ else if (aspectRatio.includes("1:1")) shortPrompt += "Square 1:1 format perfectly framed. ";
2676
+ else if (aspectRatio.includes("3:4")) shortPrompt += "Vertical 3:4 portrait orientation perfectly framed. ";
2677
+
2678
+ let addOns = [];
2679
+ if (additionalPromptWan) addOns.push(additionalPromptWan);
2680
+ if (document.getElementById('detailsCollage').checked) addOns.push("formatted as a split-screen collage with close-up macro shots of clothing details");
2681
+ if (document.getElementById('anglesCollage').checked) addOns.push("formatted as a multi-panel collage showing different angles (front, back, side)");
2682
+ if (document.getElementById('variantsCollage').checked) addOns.push("formatted as a collage showing all color variants explicitly present in the reference image (strictly no duplicates, no omissions, and no hallucinated colors)");
2683
+
2684
+ const wantsTextOverlay = document.getElementById('textOverlayCheck').checked;
2685
+ const textToOverlay = document.getElementById('textOverlayInput').value.trim();
2686
+ const wantsLogoOverlay = document.getElementById('logoOverlayCheck_model').checked;
2687
+ const logoToOverlay = document.getElementById('logoOverlayInput_model').value.trim();
2688
+
2689
+ if (wantsTextOverlay && textToOverlay) addOns.push(`incorporating stylish text overlay that says "${textToOverlay}"`);
2690
+ if (wantsLogoOverlay && logoToOverlay) addOns.push(`incorporating a logo (${logoToOverlay})`);
2691
+
2692
+ if (addOns.length > 0) shortPrompt += " " + addOns.join(", ") + ". ";
2693
+ shortPrompt += aspectRatio;
2694
+ return `${shortPrompt.replace(/\s+/g, ' ').trim()}`;
2695
+ }
2696
+
2697
  prompt = isOwnModel ? promptsData.base_prompts.model_base_own_model : promptsData.base_prompts.model_base;
2698
  const stylePrompt = promptsData.flagship_styles[styleKey];
2699
  const shotType = document.getElementById('shotType').value;
 
2763
  } else if (currentMode === 'children') {
2764
  const isChildCelebrity = document.getElementById('childCelebrityCheck').checked;
2765
  const wantsMarketplace = document.getElementById('marketplaceCheck_children').checked;
2766
+ const isWan27 = document.getElementById('wan27Check_children') && document.getElementById('wan27Check_children').checked;
2767
  const styleKey = document.querySelector('#childStyleSelector .style-btn.active').dataset.value;
2768
  aspectRatio = document.querySelector('#aspectRatioSelectorChildren .aspect-ratio-btn.active').dataset.value;
2769
 
2770
+ if (isWan27) {
2771
+ const additionalPromptWan = document.getElementById('child_additional_prompt').value;
2772
+ let shortPrompt = "High-end child fashion photography. ";
2773
+ const pose = document.getElementById('child_pose').value;
2774
+ const shotType = document.getElementById('child_shotType').value;
2775
+ const viewAngle = document.getElementById('child_viewAngle').value;
2776
+ const clothingDetails = document.getElementById('child_details').value || "highly detailed clothing";
2777
+
2778
+ if (isChildCelebrity) {
2779
+ shortPrompt += "Model: flawless lookalike of " + document.getElementById('childCelebrityName').value + ". ";
2780
+ } else {
2781
+ const age = document.getElementById('child_age').value;
2782
+ const gender = document.getElementById('child_gender').value;
2783
+ const nationality = document.getElementById('child_nationality').value.toLowerCase();
2784
+ const hairColor = document.getElementById('child_hairColor').value;
2785
+ const hairstyle = document.getElementById('child_hairstyle').value;
2786
+ const eyeColor = document.getElementById('child_eyeColor').value;
2787
+ shortPrompt += `Model: ${age} ${nationality} ${gender} child, ${hairColor} ${hairstyle}, ${eyeColor}. `;
2788
+ }
2789
+
2790
+ shortPrompt += `Wearing: ${clothingDetails}. `;
2791
+ shortPrompt += `Shot as ${shotType}, from ${viewAngle}, action: ${pose}. `;
2792
+ shortPrompt += `Setting: ${styleKey.replace(/_/g, ' ')} environment. Joyful and beautiful atmosphere, cinematic lighting, ultra-detailed masterpiece. FLAWLESS ANATOMY: Perfect human body, exactly two arms, two legs, perfect hands and fingers, no deformations. `;
2793
+
2794
+ if (aspectRatio.includes("9:16")) shortPrompt += "Strictly vertical 9:16 composition perfectly framed. ";
2795
+ else if (aspectRatio.includes("16:9")) shortPrompt += "Cinematic horizontal 16:9 composition perfectly framed. ";
2796
+ else if (aspectRatio.includes("1:1")) shortPrompt += "Square 1:1 format perfectly framed. ";
2797
+ else if (aspectRatio.includes("3:4")) shortPrompt += "Vertical 3:4 portrait orientation perfectly framed. ";
2798
+
2799
+ let addOns = [];
2800
+ if (additionalPromptWan) addOns.push(additionalPromptWan);
2801
+ if (document.getElementById('child_detailsCollage').checked) addOns.push("formatted as a split-screen collage with close-up macro shots of clothing details");
2802
+ if (document.getElementById('child_anglesCollage').checked) addOns.push("formatted as a multi-panel collage showing different angles (front, back, side)");
2803
+ if (document.getElementById('child_variantsCollage').checked) addOns.push("formatted as a collage showing all color variants explicitly present in the reference image (strictly no duplicates, no omissions, and no hallucinated colors)");
2804
+
2805
+ const wantsTextOverlay = document.getElementById('child_textOverlayCheck').checked;
2806
+ const textToOverlay = document.getElementById('child_textOverlayInput').value.trim();
2807
+ const wantsLogoOverlay = document.getElementById('logoOverlayCheck_children').checked;
2808
+ const logoToOverlay = document.getElementById('logoOverlayInput_children').value.trim();
2809
+
2810
+ if (wantsTextOverlay && textToOverlay) addOns.push(`incorporating stylish text overlay that says "${textToOverlay}"`);
2811
+ if (wantsLogoOverlay && logoToOverlay) addOns.push(`incorporating a logo (${logoToOverlay})`);
2812
+
2813
+ if (addOns.length > 0) shortPrompt += " " + addOns.join(", ") + ". ";
2814
+ shortPrompt += aspectRatio;
2815
+ return `${shortPrompt.replace(/\s+/g, ' ').trim()}`;
2816
+ }
2817
+
2818
  prompt = promptsData.base_prompts.children_base;
2819
  const stylePrompt = promptsData.flagship_styles[styleKey];
2820
  const clothingDetails = document.getElementById('child_details').value || "the provided clothing";
 
2875
  const wantsMarketplace = document.getElementById('marketplaceCheck_object').checked;
2876
  const isFurniture = document.getElementById('objectFurnitureCheck') && document.getElementById('objectFurnitureCheck').checked;
2877
  const objectName = document.getElementById('object_name').value || "the product";
2878
+ const isWan27 = document.getElementById('wan27Check_object') && document.getElementById('wan27Check_object').checked;
2879
  const styleKey = document.querySelector('#objectStyleSelector .style-btn.active').dataset.value;
2880
  const stylePrompt = promptsData.object_styles[styleKey];
2881
  additionalPrompt = document.getElementById('object_additional_prompt').value;
2882
  aspectRatio = document.querySelector('#aspectRatioSelectorObject .aspect-ratio-btn.active').dataset.value;
2883
 
2884
+ if (isWan27) {
2885
+ const additionalPromptWan = document.getElementById('object_additional_prompt').value;
2886
+ let shortPrompt = "Award-winning commercial product photography, extremely beautiful, highly aesthetic and visually striking. ";
2887
+
2888
+ if (isFurniture) {
2889
+ shortPrompt += "Product is interior furniture or a rug, shown in full accurate real-world dimensions. ";
2890
+ }
2891
+
2892
+ if (withModel) {
2893
+ const shotType = document.getElementById('object_shotType').value;
2894
+ if (isFurniture) {
2895
+ shortPrompt += `Model is interacting with the furniture/rug (${objectName}). `;
2896
+ } else {
2897
+ shortPrompt += `Model holding the product (${objectName}). `;
2898
+ }
2899
+ if (document.getElementById('objectCelebrityCheck').checked) {
2900
+ shortPrompt += `Model is a flawless ${document.getElementById('objectCelebrityName').value} lookalike. `;
2901
+ }
2902
+ shortPrompt += `Shot as ${shotType}. `;
2903
+ if (isFurniture) {
2904
+ shortPrompt += "Model is sitting, standing, or lounging naturally on the furniture. Perfect real-world scale and full dimensions. ";
2905
+ } else {
2906
+ shortPrompt += "Hands perfectly placed, natural interaction. ";
2907
+ }
2908
+ shortPrompt += "FLAWLESS ANATOMY: Perfect human body, exactly two arms, two legs, perfect hands and fingers, no deformations. ";
2909
+ } else if (onMannequin) {
2910
+ shortPrompt += `Product: ${objectName}, displayed beautifully on a high-end headless mannequin. `;
2911
+ } else {
2912
+ shortPrompt += `Product: ${objectName}. Masterfully positioned in the center of the frame, perfect angles. `;
2913
+ }
2914
+
2915
+ shortPrompt += `Setting: ${styleKey.replace(/_/g, ' ')} environment. Professional cinematic lighting, stunning reflections, sharp focus, masterpiece, 8k resolution. `;
2916
+
2917
+ if (aspectRatio.includes("9:16")) shortPrompt += "Strictly vertical 9:16 composition, perfectly centered. ";
2918
+ else if (aspectRatio.includes("16:9")) shortPrompt += "Cinematic horizontal 16:9 composition perfectly framed. ";
2919
+ else if (aspectRatio.includes("1:1")) shortPrompt += "Square 1:1 format perfectly framed. ";
2920
+ else if (aspectRatio.includes("3:4")) shortPrompt += "Vertical 3:4 portrait orientation perfectly framed. ";
2921
+
2922
+ let addOns = [];
2923
+ if (additionalPromptWan) addOns.push(additionalPromptWan);
2924
+ if (document.getElementById('object_detailsCollage').checked) addOns.push("formatted as a split-screen collage with close-up macro shots of material details");
2925
+ if (document.getElementById('object_anglesCollage').checked) addOns.push("formatted as a multi-panel collage showing different angles (front, back, side)");
2926
+ if (document.getElementById('object_variantsCollage').checked) addOns.push("formatted as a collage showing all product color variants explicitly present in the reference image (strictly no duplicates, no omissions, and no hallucinated colors)");
2927
+
2928
+ const wantsTextOverlay = document.getElementById('object_textOverlayCheck').checked;
2929
+ const textToOverlay = document.getElementById('object_textOverlayInput').value.trim();
2930
+ const wantsLogoOverlay = document.getElementById('logoOverlayCheck_object').checked;
2931
+ const logoToOverlay = document.getElementById('logoOverlayInput_object').value.trim();
2932
+
2933
+ if (wantsTextOverlay && textToOverlay) addOns.push(`incorporating stylish text overlay that says "${textToOverlay}"`);
2934
+ if (wantsLogoOverlay && logoToOverlay) addOns.push(`incorporating a logo (${logoToOverlay})`);
2935
+
2936
+ if (addOns.length > 0) shortPrompt += " " + addOns.join(", ") + ". ";
2937
+ shortPrompt += aspectRatio;
2938
+ return `${shortPrompt.replace(/\s+/g, ' ').trim()}`;
2939
+ }
2940
+
2941
  if (withModel) {
2942
  prompt = promptsData.base_prompts.model_base;
2943
  const isCelebrity = document.getElementById('objectCelebrityCheck').checked;
 
3023
 
3024
  } else if (currentMode === 'cosmetics') {
3025
  const wantsMarketplace = document.getElementById('marketplaceCheck_cosmetics').checked;
3026
+ const isWan27 = document.getElementById('wan27Check_cosmetics') && document.getElementById('wan27Check_cosmetics').checked;
3027
  const cosmeticsName = document.getElementById('cosmetics_name').value || "the cosmetic product";
3028
  const styleKey = document.querySelector('#cosmeticsStyleSelector .style-btn.active').dataset.value;
3029
  const stylePrompt = promptsData.object_styles[styleKey];
3030
  additionalPrompt = document.getElementById('cosmetics_additional_prompt').value;
3031
  aspectRatio = document.querySelector('#aspectRatioSelectorCosmetics .aspect-ratio-btn.active').dataset.value;
3032
 
3033
+ if (isWan27) {
3034
+ const additionalPromptWan = document.getElementById('cosmetics_additional_prompt').value;
3035
+ let shortPrompt = "High-end cosmetics beauty campaign photography. ";
3036
+ const shotType = document.getElementById('cosmetics_shotType').value;
3037
+
3038
+ shortPrompt += `Product: ${cosmeticsName}. `;
3039
+ shortPrompt += `Model applying the product, shot as ${shotType}. `;
3040
+ if (document.getElementById('cosmeticsCelebrityCheck').checked) {
3041
+ shortPrompt += `Model is a flawless ${document.getElementById('cosmeticsCelebrityName').value} lookalike. `;
3042
+ }
3043
+ shortPrompt += `Setting: ${styleKey.replace(/_/g, ' ')} environment. Soft beauty lighting, highly aesthetic, masterpiece, 8k resolution. FLAWLESS ANATOMY: Perfect human body, exactly two arms, two legs, perfect hands and fingers, no deformations. `;
3044
+
3045
+ if (aspectRatio.includes("9:16")) shortPrompt += "Strictly vertical 9:16 portrait composition, perfect framing. ";
3046
+ else if (aspectRatio.includes("16:9")) shortPrompt += "Cinematic horizontal 16:9 composition perfectly framed. ";
3047
+ else if (aspectRatio.includes("1:1")) shortPrompt += "Square 1:1 format perfectly framed. ";
3048
+ else if (aspectRatio.includes("3:4")) shortPrompt += "Vertical 3:4 portrait orientation perfectly framed. ";
3049
+
3050
+ let addOns = [];
3051
+ if (additionalPromptWan) addOns.push(additionalPromptWan);
3052
+ if (document.getElementById('cosmetics_detailsCollage').checked) addOns.push("formatted as a split-screen collage with close-up macro shots of product texture and smears");
3053
+ if (document.getElementById('cosmetics_anglesCollage').checked) addOns.push("formatted as a multi-panel collage showing different angles");
3054
+ if (document.getElementById('cosmetics_variantsCollage').checked) addOns.push("formatted as a collage showing all shade variants explicitly present in the reference image (strictly no duplicates, no omissions, andno hallucinated colors)");
3055
+
3056
+ const wantsTextOverlay = document.getElementById('cosmetics_textOverlayCheck').checked;
3057
+ const textToOverlay = document.getElementById('cosmetics_textOverlayInput').value.trim();
3058
+ const wantsLogoOverlay = document.getElementById('logoOverlayCheck_cosmetics').checked;
3059
+ const logoToOverlay = document.getElementById('logoOverlayInput_cosmetics').value.trim();
3060
+
3061
+ if (wantsTextOverlay && textToOverlay) addOns.push(`incorporating stylish text overlay that says "${textToOverlay}"`);
3062
+ if (wantsLogoOverlay && logoToOverlay) addOns.push(`incorporating a logo (${logoToOverlay})`);
3063
+
3064
+ if (addOns.length > 0) shortPrompt += " " + addOns.join(", ") + ". ";
3065
+ shortPrompt += aspectRatio;
3066
+ return `${shortPrompt.replace(/\s+/g, ' ').trim()}`;
3067
+ }
3068
+
3069
  prompt = promptsData.base_prompts.cosmetics_base;
3070
  const isCelebrity = document.getElementById('cosmeticsCelebrityCheck').checked;
3071
 
 
3131
  if (additionalPrompt) {
3132
  prompt += `\\n\\n**ADDITIONAL ARTISTIC DIRECTIVES:** ${additionalPrompt}`;
3133
  }
 
 
3134
 
3135
  return `${prompt} ${aspectRatio}`.trim();
3136
  }
 
3153
  btn.querySelector('span[data-lang-key]').innerHTML = langData.copied_launching;
3154
 
3155
  setTimeout(() => {
3156
+ let targetUrl = 'https://arena.ai/ru/c/new?mode=direct&chat-modality=image';
3157
+ window.open(targetUrl, '_blank');
 
3158
  setTimeout(() => {
3159
  btn.style.background = "";
3160
  btn.querySelector('span[data-lang-key]').innerHTML = originalText;
 
3163
  } catch (err) {
3164
  console.error('Failed to copy: ', err);
3165
  alert(langData.copy_failed);
3166
+ console.log(`${langData.your_prompt}\\n`, cleanPrompt);
3167
  }
3168
  }
3169
 
 
3564
  backup_thread = threading.Thread(target=periodic_backup, daemon=True)
3565
  backup_thread.start()
3566
  port = int(os.environ.get('PORT', 7860))
3567
+ app.run(debug=False, host='0.0.0.0', port=port)