Kgshop commited on
Commit
2d67aa2
·
verified ·
1 Parent(s): ef05f2a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +466 -29
app.py CHANGED
@@ -79,6 +79,11 @@ def setup_initial_files():
79
  2. **MODEL SYNTHESIS & PRODUCT APPLICATION:** Generate a hyper-realistic human model. Synthesize lifelike skin with visible pores, subtle imperfections, and realistic micro-textures. Crucially, the cosmetic product MUST be applied flawlessly to the model's face or body (e.g., lipstick on lips, eyeshadow on eyes, foundation on skin), demonstrating the exact shade, texture, and finish of the real product. The model must also elegantly hold the product. ABSOLUTELY NO WAXY, PLASTIC, OR GLASS-LIKE SKIN TEXTURES.
80
  3. **ZERO DEVIATION PROTOCOL:** Absolutely no artistic interpretation of the product's color or texture. The applied makeup must be a 1:1 match to the product inside the packaging. No waxy skin.
81
  4. **STUDIO LIGHTING MASTERY:** High-end beauty lighting. Soft, diffused, yet shape-defining highlights to accentuate the skin texture and the cosmetic product's finish without creating a fake glossy CGI effect.""",
 
 
 
 
 
82
  "marketplace_mode_base": """\n\n**COMPOSITION DIRECTIVE (MARKETPLACE HERO-SHOT MODE):** YOU ARE A WORLD-CLASS E-COMMERCE ART DIRECTOR. The primary goal is to create a visually arresting "hero image" for a product listing that maximizes click-through rates. The main subject must be perfectly rendered and visually dominant.
83
  - **Dynamic Background & Effects:** The background is clean and non-distracting but enhanced with sophisticated, context-aware special effects. **MANDATORY: NO TEXT OR GRAPHICAL ICONS/LOGOS.**
84
  - **If the product is clothing/wearable:** Generate elegant swirls of fabric, subtle particle effects, or abstract light patterns that complement the garment's color and material.
@@ -151,6 +156,19 @@ def setup_initial_files():
151
  "volcanic_ash_desert": "The product is presented on a piece of dramatic, jet-black volcanic rock on a black sand beach. The background is a soft-focus view of misty, crashing ocean waves. Moody, diffused light creates sophisticated reflections on the product's surface, emphasizing its premium quality and resilience.",
152
  "salt_flats_mirage": "The product rests on the stark, white, crystalline surface of a salt flat. A long, sharp shadow is cast by the intense sun. The background is a minimalist, out-of-focus horizon where the white ground meets a deep blue sky, creating a visually clean and high-impact composition.",
153
  "highlands_majesty": "The product is placed on an ancient, mossy stone, with the misty, rolling hills of the Scottish Highlands blurred in the background. The lighting is soft and natural, with realistic water droplets clinging to the product's surface, evoking a sense of enduring, natural luxury."
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  }
155
  }
156
  with open(PROMPTS_FILE, 'w', encoding='utf-8') as f:
@@ -831,16 +849,17 @@ p.subtitle {
831
 
832
  .mode-selector {
833
  display: grid;
834
- grid-template-columns: repeat(4, 1fr);
835
  margin-bottom: 35px;
836
  background-color: var(--input-bg);
837
  border-radius: 12px;
838
  padding: 6px;
839
  border: 1px solid var(--border);
 
840
  }
841
 
842
  .mode-btn {
843
- padding: 14px 10px;
844
  background-color: transparent;
845
  border: none;
846
  color: var(--text-secondary);
@@ -1189,12 +1208,15 @@ textarea {
1189
  h1 { font-size: 2rem; }
1190
  .form-grid { grid-template-columns: 1fr; gap: 20px; }
1191
  .full-width { grid-column: span 1; }
1192
- .mode-selector { grid-template-columns: repeat(2, 1fr); gap: 5px; }
1193
  .mode-btn { font-size: 0.75rem; padding: 12px 5px; }
1194
  .style-grid { grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); }
1195
  .top-toggles { flex-direction: column; gap: 15px; }
1196
  .celebrity-grid { grid-template-columns: 1fr; grid-column: span 1; gap: 20px; }
1197
  }
 
 
 
1198
  </style>
1199
  </head>
1200
  <body>
@@ -1215,6 +1237,7 @@ textarea {
1215
  <button id="modeChildrenBtn" class="mode-btn" onclick="switchMode('children')" data-lang-key="modeChildren">Дети</button>
1216
  <button id="modeObjectBtn" class="mode-btn" onclick="switchMode('object')" data-lang-key="modeObject">Предмет</button>
1217
  <button id="modeCosmeticsBtn" class="mode-btn" onclick="switchMode('cosmetics')" data-lang-key="modeCosmetics">Косметика</button>
 
1218
  </div>
1219
 
1220
  <form id="promptForm">
@@ -1592,7 +1615,7 @@ textarea {
1592
  <select id="child_pose">
1593
  <option value="running joyfully in a field" data-lang-key="child_pose_running">Бежит по полю</option>
1594
  <option value="playing enthusiastically with wooden toys on the floor" data-lang-key="child_pose_playing">Играет с игрушками</option>
1595
- <option value="sitting and curiously looking at a picture book" data-lang-key="child_pose_reading">Сидит с китеп</option>
1596
  <option value="posing for a candid school photo, smiling naturally" selected data-lang-key="child_pose_posing">Позирует для фото</option>
1597
  <option value="laughing and jumping on a bed" data-lang-key="child_pose_jumping">Прыгает на кровати</option>
1598
  </select>
@@ -2107,6 +2130,226 @@ textarea {
2107
  </div>
2108
  </div>
2109
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2110
  <div class="btn-container">
2111
  <button type="button" class="action-btn" onclick="processAndOpen()">
2112
  <span data-lang-key="launchBtn">Launch Synkris</span>
@@ -2128,9 +2371,10 @@ const cc_f = {"Dakota Fanning":"Дакота Фаннинг","Elle Fanning":"Э
2128
 
2129
  const translations = {
2130
  ru: {
2131
- subtitle: "PROMPT GENERATOR & LAUNCHER", modeModel: "Фото на модели", modeChildren: "Дети", modeObject: "Предмет", modeCosmetics: "Косметика",
2132
  section1Title: "Параметры модели", section2Title: "Сцена и Стиль", section3Title: "Композиция и Детали", section1ObjectTitle: "Параметры объекта",
2133
- section2ObjectTitle: "Сцена и Стиль", section1CosmeticsTitle: "Продукт и Модель", ownModelCheck: "Своя модель (использует 2 фото: одежду + модель)",
 
2134
  objectWithModelCheck: "С моделью", objectOnMannequinCheck: "На манекене", celebrityCheck: "Знаменитости", marketplaceCheck: "Режим маркетплейса",
2135
  celebrityName: "Знаменитость", gender: "Пол", gender_female: "Женщина", gender_male: "Мужчина", age: "Возраст", age_teen: "14-18 лет",
2136
  age_20_25: "20-25 лет", age_25_30: "25-30 лет", age_30_40: "30-40 лет", age_40_50: "40-50 лет", nationality: "Внешность/Этнос",
@@ -2151,12 +2395,13 @@ const translations = {
2151
  additionalDirectives: "Дополнительные директивы", additionalDirectivesPlaceholderModel: "Например: в кадре виден телефон последней модели, эффект мокрых волос...",
2152
  child_gender_girl: "Девочка", child_gender_boy: "Мальчик", child_age_infant: "6-12 месяцев", child_age_toddler: "2-4 года", child_age_child: "5-8 лет",
2153
  child_age_preteen: "9-12 лет", child_shot_full: "В полный рост", child_shot_medium: "По пояс", child_shot_portrait: "Портрет",
2154
- childPoseAction: "Поза/Действие", child_pose_running: "Бежит по полю", child_pose_playing: "Играет с игрушками", child_pose_reading: "Сидит с книгой",
2155
  child_pose_posing: "Позирует для фото", child_pose_jumping: "Прыгает на кровати", childDetailsLabel: "Одежда и Де��али",
2156
  childDetailsPlaceholder: "Пример: джинсовый комбинезон с потертостями и металлическими пуговицами, вельветовая рубашка в рубчик",
2157
  additionalDirectivesPlaceholderChild: "Например: добавь инфографику с текстом 'organic cotton'", objectNameLabel: "Название/Описание предмета",
2158
  objectNamePlaceholder: "Например: флакон духов 'Noir', кроссовки 'CyberRun', часы 'Classic Timepiece'", cosmeticsNameLabel: "Название/Описание косметики",
2159
- cosmeticsNamePlaceholder: "Например: красная помада 'Ruby', тональный крем 'Glow', палетка теней", styleBackground: "Стиль / Фон",
 
2160
  additionalDirectivesPlaceholderObject: "Например: добавить инфографику 'new collection', левитация предмета",
2161
  additionalDirectivesPlaceholderCosmetics: "Например: акцент на сиянии кожи, макро-кадр губ", detailsVariations: "Детали и Вариации",
2162
  detailsCollage: "Коллаж с увеличенными деталями (ткань, фурнитура)", detailsCollageObject: "Коллаж с увеличенными деталями (материал, текстура)",
@@ -2170,6 +2415,7 @@ const translations = {
2170
  wan27Check: "Wan 2.7 (Короткий промпт)", wan27Tooltip: 'вы можете отметить этот параметр и пользоваться новым видом качества , в поле выбора качества в поиске напишите "27" и у вас выйдет wan 2.7 image pro',
2171
  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': 'Нагорье (Шотландия)'},
2172
  object_styles: {'studio': 'Студия', 'minimalism': 'Минимализм', 'nature': 'Природа', 'luxe': 'Люкс', 'dark': 'Драма', 'geometric': 'Геометрия', 'floating': 'Левитация', 'lifestyle': 'Лайфстайл', 'splash': 'Всплеск', 'handmade': 'Мастерская', 'alaska_winter': 'Аляска (зима)', 'football_field': 'Футбольное поле', 'volcanic_ash_desert': 'Вулкан (Исландия)', 'salt_flats_mirage': 'Солончак (Боливия)', 'highlands_majesty': 'Нагорье (Шотландия)'},
 
2173
  female_body_types: {'standard': 'Стандартное', 'very_slim': 'Очень стройное (модель)', 'slim': 'Стройное (натуральное)', 'slim_busty': 'Стройное с пышной грудью', 'athletic': 'Атлетичное', 'petite': 'Миниатюрное', 'hourglass': 'Песочные часы', 'fit_curvy': 'Спортивное (curvy)', 'plus_size': 'Пышные', 'curvy': 'Мягкое (curvy)', 'full_figured': 'Плюс-сайз', 'pregnant': 'Беременная (одежда для беременных)'},
2174
  male_body_types: {'athletic': 'Атлетичное', 'lean and toned': 'Поджарое', 'muscular build': 'Мускулистое', 'broad build': 'Крупное', 'slim build': 'Худощавое'},
2175
  female_hairstyles: {'long wavy hair': 'Длинные волнистые', 'short bob cut': 'Короткий боб', 'elegant updo': 'Элегантный пучок', 'straight shoulder-length hair': 'Прямые до плеч', 'pixie cut': 'Пикси', 'messy bun': 'Небрежный пучок', 'high ponytail': 'Высокий хвост', 'braids': 'Косы', 'curly afro': 'Афро кудри', 'bangs': 'С челкой', 'layered haircut': 'Каскад', 'wearing a hijab': 'В платке'},
@@ -2183,9 +2429,10 @@ const translations = {
2183
  celebrities_male: c_m, celebrities_female: c_f, child_celebrities_male: cc_m, child_celebrities_female: cc_f
2184
  },
2185
  kz: {
2186
- subtitle: "PROMPT ГЕНЕРАТОРЫ ЖӘНЕ ІСКЕ ҚОСҚЫШ", modeModel: "Модельдегі фото", modeChildren: "Балалар", modeObject: "Зат", modeCosmetics: "Косметика",
2187
  section1Title: "Модель параметрлері", section2Title: "Сахна және стиль", section3Title: "Композиция және бөлшектер", section1ObjectTitle: "Нысан параметрлері",
2188
- section2ObjectTitle: "Сахна және стиль", section1CosmeticsTitle: "Өнім және модель", ownModelCheck: "Өз моделіңіз (2 фото қолданады: киім + модель)",
 
2189
  objectWithModelCheck: "Модельмен", objectOnMannequinCheck: "Манекенде", celebrityCheck: "Атақты адамдар", marketplaceCheck: "Маркетплейс режимі",
2190
  celebrityName: "Атақты адам", gender: "Жынысы", gender_female: "Әйел", gender_male: "Ер", age: "Жасы", age_teen: "14-18 жас",
2191
  age_20_25: "20-25 жас", age_25_30: "25-30 жас", age_30_40: "30-40 жас", age_40_50: "40-50 жас", nationality: "Сыртқы келбеті/Этнос",
@@ -2211,7 +2458,8 @@ const translations = {
2211
  childDetailsPlaceholder: "Мысалы: сыдырылған және металл түймелері бар джинсы комбинезон, вельвет жейде",
2212
  additionalDirectivesPlaceholderChild: "Мысалы: 'organic cotton' мәтіні бар инфографика қосу", objectNameLabel: "Заттың атауы/сипаттамасы",
2213
  objectNamePlaceholder: "Мысалы: 'Noir' иіссу құтысы, 'CyberRun' кроссовкасы, 'Classic Timepiece' сағаты", cosmeticsNameLabel: "Косметика атауы/сипаттамасы",
2214
- cosmeticsNamePlaceholder: "Мысалы: қызыл далап 'Ruby', тоналды крем 'Glow', қабақ бояуы", styleBackground: "Стиль / Фон",
 
2215
  additionalDirectivesPlaceholderObject: "Мысалы: 'new collection' инфографикасын қосу, заттың левитациясы",
2216
  additionalDirectivesPlaceholderCosmetics: "Мысалы: терінің жарқырауына назар аудару, еріннің макро-кадры", detailsVariations: "Бөлшектер және вариациялар",
2217
  detailsCollage: "Үлкейтіл��ен бөлшектері бар коллаж (мата, фурнитура)", detailsCollageObject: "Үлкейтілген бөлшектері бар коллаж (материал, текстура)",
@@ -2225,6 +2473,7 @@ const translations = {
2225
  wan27Check: "Wan 2.7 (Қысқа промпт)", wan27Tooltip: 'Бұл параметрді белгілеп, жаңа сапа түрін пайдалана аласыз, іздеу жолағына "27" деп жазыңыз, сонда wan 2.7 image pro шығады',
2226
  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': 'Таулы аймақ (Шотландия)'},
2227
  object_styles: {'studio': 'Студия', 'minimalism': 'Минимализм', 'nature': 'Табиғат', 'luxe': 'Люкс', 'dark': 'Драма', 'geometric': 'Геометрия', 'floating': 'Левитация', 'lifestyle': 'Лайфстайл', 'splash': 'Шашырау', 'handmade': 'Шеберхана', 'alaska_winter': 'Аляска (қыс)', 'football_field': 'Футбол алаңы', 'volcanic_ash_desert': 'Жанартау (Исландия)', 'salt_flats_mirage': 'Тұзды алқап (Боливия)', 'highlands_majesty': 'Таулы аймақ (Шотландия)'},
 
2228
  female_body_types: {'standard': 'Стандартты', 'very_slim': 'Өте сымбатты (модель)', 'slim': 'Сымбатты (табиғи)', 'slim_busty': 'Сымбатты, үлкен кеуделі', 'athletic': 'Атлетикалық', 'petite': 'Кішкентай', 'hourglass': 'Құм сағат', 'fit_curvy': 'Спорттық (curvy)', 'plus_size': 'Толық', 'curvy': 'Жұмсақ (curvy)', 'full_figured': 'Плюс-сайз', 'pregnant': 'Жүкті (жүкті әйелдерге арналған киім)'},
2229
  male_body_types: {'athletic': 'Атлетикалық', 'lean and toned': 'Шымыр', 'muscular build': 'Бұлшықетті', 'broad build': 'Ірі', 'slim build': 'Арық'},
2230
  female_hairstyles: {'long wavy hair': 'Ұзын толқынды', 'short bob cut': 'Қысқа боб', 'elegant updo': 'Элегантты жинақ', 'straight shoulder-length hair': 'Иыққа дейін түзу', 'pixie cut': 'Пикси', 'messy bun': 'Салғырт жинақ', 'high ponytail': 'Биік құйрық', 'braids': 'Өрімдер', 'curly afro': 'Афро бұйра', 'bangs': 'Кекілмен', 'layered haircut': 'Каскад', 'wearing a hijab': 'Орамалда'},
@@ -2238,9 +2487,10 @@ const translations = {
2238
  celebrities_male: c_m, celebrities_female: c_f, child_celebrities_male: cc_m, child_celebrities_female: cc_f
2239
  },
2240
  kg: {
2241
- subtitle: "PROMPT ГЕНЕРАТОРУ ЖАНА ИШКЕ КИРГИЗГИЧ", modeModel: "Моделдеги сүрөт", modeChildren: "Балдар", modeObject: "Буюм", modeCosmetics: "Косметика",
2242
  section1Title: "Моделдин параметрлери", section2Title: "Сахна жана Стиль", section3Title: "Композиция жана Деталдар", section1ObjectTitle: "Объекттин параметрлери",
2243
- section2ObjectTitle: "Сахна жана Стиль", section1CosmeticsTitle: "Продукт жана Модель", ownModelCheck: "Өз моделиңиз (2 сүрөт колдонот: кийим + модель)",
 
2244
  objectWithModelCheck: "Модель менен", objectOnMannequinCheck: "Манекенде", celebrityCheck: "Атактуулар", marketplaceCheck: "Маркетплейс режимі",
2245
  celebrityName: "Атактуу", gender: "Жынысы", gender_female: "Аял", gender_male: "Эркек", age: "Жашы", age_teen: "14-18 жаш",
2246
  age_20_25: "20-25 жаш", age_25_30: "25-30 жаш", age_30_40: "30-40 жаш", age_40_50: "40-50 жас", nationality: "Сырткы көрүнүшү/Этнос",
@@ -2266,7 +2516,8 @@ const translations = {
2266
  childDetailsPlaceholder: "Мисалы: эскирген жана металл топчулары бар джинсы комбинезон, вельвет көйнөк",
2267
  additionalDirectivesPlaceholderChild: "Мисалы: 'organic cotton' тексти менен инфографика кошуу", objectNameLabel: "Буюмдун аталышы/сыпаттамасы",
2268
  objectNamePlaceholder: "Мисалы: 'Noir' атыр флакону, 'CyberRun' кроссовкасы, 'Classic Timepiece' сааты", cosmeticsNameLabel: "Косметиканын аталышы/сыпаттамасы",
2269
- cosmeticsNamePlaceholder: "Мисалы: кызыл помада 'Ruby', тоналдык крем 'Glow', көз боёгу", styleBackground: "Стиль / Фон",
 
2270
  additionalDirectivesPlaceholderObject: "Мисалы: 'new collection' инфографикасын кошуу, буюмдун левитациясы",
2271
  additionalDirectivesPlaceholderCosmetics: "Мисалы: теринин жаркырашына басым, эриндин макро-кадры", detailsVariations: "Деталдар жана вариациялар",
2272
  detailsCollage: "Чоңойтулган деталдары менен коллаж (кездеме, фурнитура)", detailsCollageObject: "Чоңойтулган деталдары менен коллаж (материал, текстура)",
@@ -2280,6 +2531,7 @@ const translations = {
2280
  wan27Check: "Wan 2.7 (Кыска промпт)", wan27Tooltip: 'Бул параметрди белгилеп, жаңы сапат түрүн колдоно аласыз, издөө тилкесине "27" деп жазыңыз, ошондо wan 2.7 image pro чыгат',
2281
  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': 'Тоолуу аймак (Шотландия)'},
2282
  object_styles: {'studio': 'Студия', 'minimalism': 'Минимализм', 'nature': 'Жаратылыш', 'luxe': 'Люкс', 'dark': 'Драма', 'geometric': 'Геометрия', 'floating': 'Левитация', 'lifestyle': 'Лайфстайл', 'splash': 'Чачыроо', 'handmade': 'Устакана', 'alaska_winter': 'Аляска (кыш)', 'football_field': 'Футбол талаасы', 'volcanic_ash_desert': 'Вулкан (Исландия)', 'salt_flats_mirage': 'Туздуу түздүк (Боливия)', 'highlands_majesty': 'Тоолуу аймак (Шотландия)'},
 
2283
  female_body_types: {'standard': 'Стандарттуу', 'very_slim': 'Абдан сымбаттуу (модель)', 'slim': 'Сымбаттуу (табигый)', 'slim_busty': 'Сымбаттуу, чоң төштүү', 'athletic': 'Атлетикалык', 'petite': 'Кичинекей', 'hourglass': 'Кум саат', 'fit_curvy': 'Спорттук (curvy)', 'plus_size': 'Толук', 'curvy': 'Жумшак (curvy)', 'full_figured': 'Плюс-сайз', 'pregnant': 'Кош бойлуу (кош бойлуулар үчүн кийим)'},
2284
  male_body_types: {'athletic': 'Атлетикалык', 'lean and toned': 'Чымыр', 'muscular build': 'Булчуңдуу', 'broad build': 'Чоң', 'slim build': 'Арык'},
2285
  female_hairstyles: {'long wavy hair': 'Узун толкундуу', 'short bob cut': 'Кыска боб', 'elegant updo': 'Элеганттуу түймөк', 'straight shoulder-length hair': 'Ийинге чейин түз', 'pixie cut': 'Пикси', 'messy bun': 'Шалакы түймөк', 'high ponytail': 'Бийик куйрук', 'braids': 'Өрүмдөр', 'curly afro': 'Афро тармал', 'bangs': 'Кекил менен', 'layered haircut': 'Каскад', 'wearing a hijab': 'Жоолукта'},
@@ -2305,7 +2557,10 @@ const fieldsToPersist = [
2305
  'object_shotType', 'wan27Check_object',
2306
  'cosmetics_gender', 'cosmetics_age', 'cosmetics_nationality', 'cosmetics_bodyType', 'cosmetics_hairColor', 'cosmetics_hairstyle', 'cosmetics_eyeColor',
2307
  'hasBeard_cosmetics', 'beardStyle_cosmetics', 'hasTattoos_cosmetics', 'tattooStyle_cosmetics', 'tattooCoverage_cosmetics',
2308
- 'cosmetics_shotType', 'wan27Check_cosmetics'
 
 
 
2309
  ];
2310
 
2311
  function saveSettings() {
@@ -2342,15 +2597,16 @@ function loadSettings() {
2342
  updateChildModelOptions();
2343
  updateObjectModelOptions();
2344
  updateCosmeticsModelOptions();
 
2345
 
2346
- ['bodyType', 'hairstyle', 'beardStyle_model', 'child_hairstyle', 'object_bodyType', 'object_hairstyle', 'beardStyle_object', 'cosmetics_bodyType', 'cosmetics_hairstyle', 'beardStyle_cosmetics'].forEach(id => {
2347
  const el = document.getElementById(id);
2348
  if (el && settings[id] !== undefined) {
2349
  el.value = settings[id];
2350
  }
2351
  });
2352
 
2353
- ['hasBeard_model', 'hasTattoos_model', 'hasBeard_object', 'hasTattoos_object', 'hasBeard_cosmetics', 'hasTattoos_cosmetics'].forEach(id => {
2354
  const el = document.getElementById(id);
2355
  if(el) el.dispatchEvent(new Event('change'));
2356
  });
@@ -2390,15 +2646,18 @@ function setLanguage(lang) {
2390
  populateStyles('childStyleSelector', langData.flagship_styles);
2391
  populateStyles('objectStyleSelector', langData.object_styles);
2392
  populateStyles('cosmeticsStyleSelector', langData.object_styles);
 
2393
 
2394
  updateModelOptions();
2395
  updateObjectModelOptions();
2396
  updateCosmeticsModelOptions();
 
2397
  updateChildModelOptions();
2398
  updateCelebrityOptions();
2399
  updateChildCelebrityOptions();
2400
  updateObjectCelebrityOptions();
2401
  updateCosmeticsCelebrityOptions();
 
2402
 
2403
  document.querySelectorAll('.lang-switcher button').forEach(btn => btn.classList.remove('active'));
2404
  document.getElementById(`lang-${lang}`).classList.add('active');
@@ -2503,6 +2762,31 @@ function updateCosmeticsModelOptions() {
2503
  populateSelect(document.getElementById('tattooCoverage_cosmetics'), langData.tattoo_coverages);
2504
  }
2505
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2506
  function updateChildModelOptions() {
2507
  const lang = localStorage.getItem('synkrisLang') || 'ru';
2508
  const langData = translations[lang];
@@ -2563,6 +2847,14 @@ function updateCosmeticsCelebrityOptions() {
2563
  populateSelect(select, gender === 'female' ? langData.celebrities_female : langData.celebrities_male);
2564
  }
2565
 
 
 
 
 
 
 
 
 
2566
 
2567
  function toggleOwnModel(isOwnModel) {
2568
  const modelParamsContainer = document.getElementById('modelParamsContainer');
@@ -2841,7 +3133,7 @@ function getPrompt() {
2841
  prompt += `\\n\\n**COMPOSITION DIRECTIVE (4-VIEW COLLAGE):** Create a professional 4-view collage in a single image. The collage must clearly show the model wearing the garment from four distinct angles: full front view, full back view, full side view, and three-quarter view. Maintain consistent lighting and background across all views.`;
2842
  }
2843
  if (wantsVariantsCollage) {
2844
- prompt += `\\n\\n**COMPOSITION DIRECTIVE (VARIANTS COLLAGE):** In a single, cohesive frame, display multiple models (or one model in different poses) showcasing the garment in ALL the different colors present in the reference image. **CRITICAL COLOR PROTOCOL: Use ONLY the exact colors shown in the reference photo. You must include every color present, do not duplicate any colors, and absolutely DO NOT hallucinate, invent, or add new colors that are not explicitly present in the source image.** The result must be a harmonious and balanced collage.`;
2845
  }
2846
  if (wantsTextOverlay && textToOverlay) {
2847
  prompt += `\\n\\n**GRAPHIC OVERLAY:** Add the following text: "${textToOverlay}". Integrate it stylishly using modern, clean typography. The text should be legible but artistically placed to complement the image, not dominate it. Minimalist icons that enhance the text are permissible.`;
@@ -3082,6 +3374,119 @@ function getPrompt() {
3082
  if (wantsLogoOverlay && logoToOverlay) {
3083
  prompt += `\\n\\n**LOGO INTEGRATION DIRECTIVE:** A high-resolution logo described as '${logoToOverlay}' is tastefully placed on the image, typically in a corner, ensuring it complements the composition without being distracting.`;
3084
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3085
  }
3086
 
3087
  if (additionalPrompt) {
@@ -3091,7 +3496,6 @@ function getPrompt() {
3091
  return `${prompt} ${aspectRatio}`.trim();
3092
  }
3093
 
3094
-
3095
  async function processAndOpen() {
3096
  const lang = localStorage.getItem('synkrisLang') || 'ru';
3097
  const langData = translations[lang];
@@ -3139,7 +3543,7 @@ document.addEventListener('DOMContentLoaded', () => {
3139
  }
3140
  });
3141
 
3142
- ['model', 'children', 'object', 'cosmetics'].forEach(prefix => {
3143
  const textCheck = document.getElementById(`${prefix}_textOverlayCheck`);
3144
  const textInput = document.getElementById(`${prefix}_textOverlayInput`);
3145
  const logoCheck = document.getElementById(`logoOverlayCheck_${prefix}`);
@@ -3193,15 +3597,12 @@ document.addEventListener('DOMContentLoaded', () => {
3193
  if (this.checked) {
3194
  objectOnMannequinCheck.checked = false;
3195
  }
3196
-
3197
  const isChecked = this.checked;
3198
  const celebrityToggle = document.getElementById('objectCelebrityToggle');
3199
  const celebrityParams = document.getElementById('objectCelebrityParamsContainer');
3200
  const modelParams = document.getElementById('objectModelParamsContainer');
3201
  const isCelebrityChecked = document.getElementById('objectCelebrityCheck').checked;
3202
-
3203
  celebrityToggle.style.display = isChecked ? 'flex' : 'none';
3204
-
3205
  if (isChecked && isCelebrityChecked) {
3206
  modelParams.style.display = 'none';
3207
  celebrityParams.classList.add('active');
@@ -3212,14 +3613,12 @@ document.addEventListener('DOMContentLoaded', () => {
3212
  modelParams.style.display = 'none';
3213
  celebrityParams.classList.remove('active');
3214
  }
3215
-
3216
  if (!isChecked) {
3217
  document.getElementById('objectCelebrityCheck').checked = false;
3218
  celebrityParams.classList.remove('active');
3219
  }
3220
  });
3221
 
3222
-
3223
  objectOnMannequinCheck.addEventListener('change', function() {
3224
  if (this.checked && objectWithModelCheck.checked) {
3225
  objectWithModelCheck.checked = false;
@@ -3244,11 +3643,49 @@ document.addEventListener('DOMContentLoaded', () => {
3244
  updateCosmeticsCelebrityOptions();
3245
  }
3246
  });
 
 
 
 
 
 
 
3247
 
3248
- ['model', 'object', 'cosmetics'].forEach(prefix => {
3249
- document.getElementById(`hasTattoos_${prefix}`).addEventListener('change', function() {
3250
- document.getElementById(`tattooOptions_${prefix}`).style.display = this.checked ? 'flex' : 'none';
3251
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3252
  const hasBeardCheckbox = document.getElementById(`hasBeard_${prefix}`);
3253
  if(hasBeardCheckbox) {
3254
  hasBeardCheckbox.addEventListener('change', function() {
 
79
  2. **MODEL SYNTHESIS & PRODUCT APPLICATION:** Generate a hyper-realistic human model. Synthesize lifelike skin with visible pores, subtle imperfections, and realistic micro-textures. Crucially, the cosmetic product MUST be applied flawlessly to the model's face or body (e.g., lipstick on lips, eyeshadow on eyes, foundation on skin), demonstrating the exact shade, texture, and finish of the real product. The model must also elegantly hold the product. ABSOLUTELY NO WAXY, PLASTIC, OR GLASS-LIKE SKIN TEXTURES.
80
  3. **ZERO DEVIATION PROTOCOL:** Absolutely no artistic interpretation of the product's color or texture. The applied makeup must be a 1:1 match to the product inside the packaging. No waxy skin.
81
  4. **STUDIO LIGHTING MASTERY:** High-end beauty lighting. Soft, diffused, yet shape-defining highlights to accentuate the skin texture and the cosmetic product's finish without creating a fake glossy CGI effect.""",
82
+ "furniture_base": """**MANDATORY: RAW UNEDITED MASTERPIECE 16K HYPER-PHOTOREALISTIC IMAGE. NO TEXT. ABSOLUTELY NO CGI RENDER LOOK, NO PLASTIC AI LOOK.**
83
+ **CORE DIRECTIVE: YOU ARE AN ELITE INTERIOR & FURNITURE VISUALIZATION ENGINE.**
84
+ 1. **FURNITURE IDENTIFICATION & DIGITAL TWINNING (ABSOLUTE FIDELITY):** From the uploaded furniture/interior image, flawlessly identify the main piece. Execute a perfect digital twin replication, as if shot for a high-end architectural digest or luxury furniture catalog. Every dimension, proportion, material texture (wood grain, leather pores, fabric weave, metal brushed finish), and color gamut must be rendered with absolute, indistinguishable accuracy.
85
+ 2. **ENVIRONMENT & LIGHTING MASTERY:** Integrate the furniture into the requested style perfectly. Use physically accurate global illumination, ray-traced reflections, and realistic shadows. The lighting should emphasize the texture, volume, and premium quality of the furniture.
86
+ 3. **ZERO DEVIATION PROTOCOL:** Do not alter the fundamental design, proportions, or distinct materials of the source furniture piece. The replication must be photorealistic and perfectly to scale within its environment.""",
87
  "marketplace_mode_base": """\n\n**COMPOSITION DIRECTIVE (MARKETPLACE HERO-SHOT MODE):** YOU ARE A WORLD-CLASS E-COMMERCE ART DIRECTOR. The primary goal is to create a visually arresting "hero image" for a product listing that maximizes click-through rates. The main subject must be perfectly rendered and visually dominant.
88
  - **Dynamic Background & Effects:** The background is clean and non-distracting but enhanced with sophisticated, context-aware special effects. **MANDATORY: NO TEXT OR GRAPHICAL ICONS/LOGOS.**
89
  - **If the product is clothing/wearable:** Generate elegant swirls of fabric, subtle particle effects, or abstract light patterns that complement the garment's color and material.
 
156
  "volcanic_ash_desert": "The product is presented on a piece of dramatic, jet-black volcanic rock on a black sand beach. The background is a soft-focus view of misty, crashing ocean waves. Moody, diffused light creates sophisticated reflections on the product's surface, emphasizing its premium quality and resilience.",
157
  "salt_flats_mirage": "The product rests on the stark, white, crystalline surface of a salt flat. A long, sharp shadow is cast by the intense sun. The background is a minimalist, out-of-focus horizon where the white ground meets a deep blue sky, creating a visually clean and high-impact composition.",
158
  "highlands_majesty": "The product is placed on an ancient, mossy stone, with the misty, rolling hills of the Scottish Highlands blurred in the background. The lighting is soft and natural, with realistic water droplets clinging to the product's surface, evoking a sense of enduring, natural luxury."
159
+ },
160
+ "furniture_styles": {
161
+ "scandinavian_minimalism": "Bright, airy Scandinavian minimalism. White walls, natural light wood (oak, ash), clean lines, and a focus on functional beauty. Soft, diffused natural light from large windows.",
162
+ "mid_century_modern": "Iconic Mid-Century Modern interior. Warm walnut woods, muted earthy tones (mustard, olive, burnt orange), and organic shapes. Retro-chic lighting and a stylish, lived-in atmosphere.",
163
+ "industrial_loft": "Raw, edgy industrial loft setting. Exposed red brick walls, large steel-framed windows, concrete floors, and visible piping. Dramatic, contrasty natural light.",
164
+ "bohemian_chic": "Lush, eclectic Bohemian chic room. Rich textures, layered Moroccan rugs, abundant indoor plants, macrame, and warm, earthy colors. Golden hour sunlight streaming in.",
165
+ "luxury_art_deco": "Opulent Art Deco interior. Geometric patterns, rich jewel tones (emerald, sapphire), brass and gold accents, luxurious velvet, and polished marble. Sophisticated, moody studio lighting.",
166
+ "wabi_sabi": "Tranquil Wabi-Sabi aesthetic. Emphasizing the beauty of imperfection. Textured plaster walls, raw stone, weathered wood, and muted, natural, organic colors. Soft, directional, contemplative light.",
167
+ "cyberpunk_neon": "Futuristic Cyberpunk apartment interior. Dark, sleek surfaces illuminated by vibrant neon lights (magenta, cyan, electric blue). High-tech elements integrated into the decor.",
168
+ "surreal_dreamscape": "Avant-garde, surreal dreamscape interior. Impossible architecture, floating elements, or a furniture piece placed in an unexpected, dreamlike environment (e.g., a bed in a shallow, perfectly still pool of water reflecting the sky). Ethereal lighting.",
169
+ "cozy_cabin": "Warm, rustic winter cabin interior. Log walls, a roaring stone fireplace, thick knit blankets, and animal skin rugs. Warm, cozy firelight and soft ambient light.",
170
+ "classic_elegance": "Timeless classic European elegance. High ceilings, intricate crown molding, wainscoting, parquet floors, and antique accents. Bright, classical interior lighting.",
171
+ "modern_outdoor": "Luxurious modern outdoor patio or terrace. High-end weatherproof materials, sleek lines, infinity pool in the background, surrounded by manicured landscaping. Bright, sunny, resort-style lighting."
172
  }
173
  }
174
  with open(PROMPTS_FILE, 'w', encoding='utf-8') as f:
 
849
 
850
  .mode-selector {
851
  display: grid;
852
+ grid-template-columns: repeat(5, 1fr);
853
  margin-bottom: 35px;
854
  background-color: var(--input-bg);
855
  border-radius: 12px;
856
  padding: 6px;
857
  border: 1px solid var(--border);
858
+ gap: 4px;
859
  }
860
 
861
  .mode-btn {
862
+ padding: 14px 8px;
863
  background-color: transparent;
864
  border: none;
865
  color: var(--text-secondary);
 
1208
  h1 { font-size: 2rem; }
1209
  .form-grid { grid-template-columns: 1fr; gap: 20px; }
1210
  .full-width { grid-column: span 1; }
1211
+ .mode-selector { grid-template-columns: repeat(3, 1fr); gap: 5px; }
1212
  .mode-btn { font-size: 0.75rem; padding: 12px 5px; }
1213
  .style-grid { grid-template-columns: repeat(auto-fill, minmax(110px, 1fr)); }
1214
  .top-toggles { flex-direction: column; gap: 15px; }
1215
  .celebrity-grid { grid-template-columns: 1fr; grid-column: span 1; gap: 20px; }
1216
  }
1217
+ @media (max-width: 450px) {
1218
+ .mode-selector { grid-template-columns: repeat(2, 1fr); }
1219
+ }
1220
  </style>
1221
  </head>
1222
  <body>
 
1237
  <button id="modeChildrenBtn" class="mode-btn" onclick="switchMode('children')" data-lang-key="modeChildren">Дети</button>
1238
  <button id="modeObjectBtn" class="mode-btn" onclick="switchMode('object')" data-lang-key="modeObject">Предмет</button>
1239
  <button id="modeCosmeticsBtn" class="mode-btn" onclick="switchMode('cosmetics')" data-lang-key="modeCosmetics">Косметика</button>
1240
+ <button id="modeFurnitureBtn" class="mode-btn" onclick="switchMode('furniture')" data-lang-key="modeFurniture">Мебель</button>
1241
  </div>
1242
 
1243
  <form id="promptForm">
 
1615
  <select id="child_pose">
1616
  <option value="running joyfully in a field" data-lang-key="child_pose_running">Бежит по полю</option>
1617
  <option value="playing enthusiastically with wooden toys on the floor" data-lang-key="child_pose_playing">Играет с игрушками</option>
1618
+ <option value="sitting and curiously looking at a picture book" data-lang-key="child_pose_reading">Сидит с книгой</option>
1619
  <option value="posing for a candid school photo, smiling naturally" selected data-lang-key="child_pose_posing">Позирует для фото</option>
1620
  <option value="laughing and jumping on a bed" data-lang-key="child_pose_jumping">Прыгает на кровати</option>
1621
  </select>
 
2130
  </div>
2131
  </div>
2132
 
2133
+ <div id="furnitureMode" class="form-mode">
2134
+ <div class="form-section">
2135
+ <h2><span class="section-number">1</span> <span data-lang-key="section1FurnitureTitle">Параметры мебели</span></h2>
2136
+ <div class="form-grid">
2137
+ <div class="form-group full-width">
2138
+ <label for="furniture_name" data-lang-key="furnitureNameLabel">Название/Описание мебели</label>
2139
+ <textarea id="furniture_name" data-lang-key-placeholder="furnitureNamePlaceholder"></textarea>
2140
+ </div>
2141
+ <div class="form-group full-width">
2142
+ <div class="checkbox-group top-toggles">
2143
+ <div class="checkbox-item">
2144
+ <input type="checkbox" id="furnitureWithModelCheck">
2145
+ <label for="furnitureWithModelCheck" data-lang-key="objectWithModelCheck">С моделью</label>
2146
+ </div>
2147
+ <div class="checkbox-item" id="furnitureCelebrityToggle" style="display: none;">
2148
+ <input type="checkbox" id="furnitureCelebrityCheck">
2149
+ <label for="furnitureCelebrityCheck" data-lang-key="celebrityCheck">Знаменитости</label>
2150
+ </div>
2151
+ <div class="checkbox-item">
2152
+ <input type="checkbox" id="wan27Check_furniture">
2153
+ <label for="wan27Check_furniture" data-lang-key="wan27Check">Wan 2.7 (Короткий промпт)</label>
2154
+ <span class="tooltip-container">
2155
+ <i class="fas fa-question-circle"></i>
2156
+ <span class="tooltip-text" data-lang-key="wan27Tooltip">вы можете отметить этот параметр и пользоваться новым видом качества , в поле выбора качества в поиске напишите "27" и у вас выйдет wan 2.7 image pro</span>
2157
+ </span>
2158
+ </div>
2159
+ </div>
2160
+ </div>
2161
+
2162
+ <div id="furnitureCelebrityParamsContainer" class="celebrity-grid">
2163
+ <div class="form-group">
2164
+ <label for="furnitureCelebrityGender" data-lang-key="gender">Пол</label>
2165
+ <select id="furnitureCelebrityGender" onchange="updateFurnitureCelebrityOptions()">
2166
+ <option value="female" data-lang-key="gender_female">Женщина</option>
2167
+ <option value="male" selected data-lang-key="gender_male">Мужчина</option>
2168
+ </select>
2169
+ </div>
2170
+ <div class="form-group">
2171
+ <label for="furnitureCelebrityName" data-lang-key="celebrityName">Знаменитость</label>
2172
+ <select id="furnitureCelebrityName"></select>
2173
+ </div>
2174
+ </div>
2175
+
2176
+ <div id="furnitureModelParamsContainer" class="form-grid full-width" style="padding:0; gap:25px; display: none;">
2177
+ <div class="form-group full-width" style="margin-bottom:-10px">
2178
+ <button type="button" class="button-link" onclick="resetSettings()" data-lang-key="resetModelSettingsBtn">Сбросить настройки модели</button>
2179
+ </div>
2180
+ <div class="form-group">
2181
+ <label for="furniture_gender" data-lang-key="gender">Пол</label>
2182
+ <select id="furniture_gender" onchange="updateFurnitureModelOptions()">
2183
+ <option value="female" data-lang-key="gender_female">Женщина</option>
2184
+ <option value="male" data-lang-key="gender_male">Мужчина</option>
2185
+ </select>
2186
+ </div>
2187
+ <div class="form-group">
2188
+ <label for="furniture_age" data-lang-key="age">Возраст</label>
2189
+ <select id="furniture_age">
2190
+ <option value="20-25 years old" selected data-lang-key="age_20_25">20-25 лет</option>
2191
+ <option value="25-30 years old" data-lang-key="age_25_30">25-30 лет</option>
2192
+ <option value="30-40 years old" data-lang-key="age_30_40">30-40 лет</option>
2193
+ <option value="40-50 years old" data-lang-key="age_40_50">40-50 лет</option>
2194
+ </select>
2195
+ </div>
2196
+ <div class="form-group">
2197
+ <label for="furniture_nationality" data-lang-key="nationality">Внешность/Этнос</label>
2198
+ <select id="furniture_nationality">
2199
+ <option value="Eastern European" data-lang-key="nat_eastern_european">Восточная Европа</option>
2200
+ <option value="Northern European" data-lang-key="nat_northern_european">Скандинавская</option>
2201
+ <option value="Mediterranean" data-lang-key="nat_mediterranean">Средиземноморская</option>
2202
+ <option value="Asian" data-lang-key="nat_asian">Азиатская</option>
2203
+ <option value="Central Asian" data-lang-key="nat_central_asian">Центральноазиатская</option>
2204
+ <option value="South Asian" data-lang-key="nat_south_asian">Южно-Азиатская (Индия)</option>
2205
+ <option value="Middle Eastern" data-lang-key="nat_middle_eastern">Ближневосточная</option>
2206
+ <option value="Caucasian" data-lang-key="nat_caucasian">Кавказская</option>
2207
+ <option value="African" data-lang-key="nat_african">Африканская</option>
2208
+ <option value="Latin American" data-lang-key="nat_latin_american">Латиноамериканская</option>
2209
+ <option value="Indigenous American" data-lang-key="nat_indigenous">Коренной Американец</option>
2210
+ <option value="Polynesian" data-lang-key="nat_polynesian">Полинезийская</option>
2211
+ <option value="Mixed Race" data-lang-key="nat_mixed">Смешанная</option>
2212
+ </select>
2213
+ </div>
2214
+ <div class="form-group">
2215
+ <label for="furniture_bodyType" data-lang-key="bodyType">Телосложение</label>
2216
+ <select id="furniture_bodyType"></select>
2217
+ </div>
2218
+ <div class="form-group">
2219
+ <label for="furniture_hairColor" data-lang-key="hairColor">Цвет волос</label>
2220
+ <select id="furniture_hairColor">
2221
+ <option value="black hair" data-lang-key="hair_black">Черные</option>
2222
+ <option value="brown hair" data-lang-key="hair_brown">Каштановые</option>
2223
+ <option value="blonde hair" data-lang-key="hair_blonde">Блонд</option>
2224
+ <option value="red hair" data-lang-key="hair_red">Рыжие</option>
2225
+ <option value="light brown hair" data-lang-key="hair_light_brown">Русые</option>
2226
+ </select>
2227
+ </div>
2228
+ <div class="form-group">
2229
+ <label for="furniture_hairstyle" data-lang-key="hairstyle">Прическа</label>
2230
+ <select id="furniture_hairstyle"></select>
2231
+ </div>
2232
+ <div class="form-group">
2233
+ <label for="furniture_eyeColor" data-lang-key="eyeColor">Цвет глаз</label>
2234
+ <select id="furniture_eyeColor">
2235
+ <option value="brown eyes" data-lang-key="eyes_brown">Карие</option>
2236
+ <option value="blue eyes" data-lang-key="eyes_blue">Голубые</option>
2237
+ <option value="green eyes" data-lang-key="eyes_green">Зеленые</option>
2238
+ <option value="gray eyes" data-lang-key="eyes_gray">Серые</option>
2239
+ </select>
2240
+ </div>
2241
+ <div class="form-group full-width" id="beardSection_furniture" style="display:none;">
2242
+ <label data-lang-key="beard">Борода</label>
2243
+ <div class="checkbox-group">
2244
+ <div class="checkbox-item">
2245
+ <input type="checkbox" id="hasBeard_furniture">
2246
+ <label for="hasBeard_furniture" data-lang-key="enableBeard">Добавить бороду</label>
2247
+ </div>
2248
+ <div id="beardOptions_furniture" style="display:none; margin-top: 15px;">
2249
+ <div class="form-group" style="margin-bottom:0;">
2250
+ <label for="beardStyle_furniture" data-lang-key="beardStyle">Тип бороды</label>
2251
+ <select id="beardStyle_furniture"></select>
2252
+ </div>
2253
+ </div>
2254
+ </div>
2255
+ </div>
2256
+ <div class="form-group full-width">
2257
+ <label data-lang-key="tattoos">Татуировки</label>
2258
+ <div class="checkbox-group">
2259
+ <div class="checkbox-item">
2260
+ <input type="checkbox" id="hasTattoos_furniture">
2261
+ <label for="hasTattoos_furniture" data-lang-key="enableTattoos">Добавить татуировки</label>
2262
+ </div>
2263
+ <div id="tattooOptions_furniture" style="display:none; display:flex; flex-direction: column; gap: 20px; margin-top: 15px;">
2264
+ <div class="form-group" style="margin-bottom:0;">
2265
+ <label for="tattooStyle_furniture" data-lang-key="tattooStyle">Стиль</label>
2266
+ <select id="tattooStyle_furniture"></select>
2267
+ </div>
2268
+ <div class="form-group" style="margin-bottom:0;">
2269
+ <label for="tattooCoverage_furniture" data-lang-key="tattooCoverage">Покрытие</label>
2270
+ <select id="tattooCoverage_furniture"></select>
2271
+ </div>
2272
+ </div>
2273
+ </div>
2274
+ </div>
2275
+ <div class="form-group full-width">
2276
+ <label for="furniture_shotType" data-lang-key="shotType">Ракурс/План</label>
2277
+ <select id="furniture_shotType">
2278
+ <option value="Full body shot, interacting with the furniture" selected data-lang-key="shot_full">В полный рост, взаимодействует с мебелью</option>
2279
+ <option value="Medium shot, sitting on or near the furniture" data-lang-key="shot_medium">Средний план, сидит на мебели</option>
2280
+ </select>
2281
+ </div>
2282
+ </div>
2283
+ </div>
2284
+ </div>
2285
+ <div class="form-section">
2286
+ <h2><span class="section-number">2</span> <span data-lang-key="section2ObjectTitle">Сцена и Стиль</span></h2>
2287
+ <div class="form-grid">
2288
+ <div class="form-group full-width">
2289
+ <div class="checkbox-group">
2290
+ <div class="checkbox-item">
2291
+ <input type="checkbox" id="marketplaceCheck_furniture">
2292
+ <label for="marketplaceCheck_furniture" data-lang-key="marketplaceCheck">Режим маркетплейса</label>
2293
+ </div>
2294
+ </div>
2295
+ </div>
2296
+ <div class="form-group full-width">
2297
+ <label data-lang-key="styleBackground">Стиль / Фон</label>
2298
+ <div id="furnitureStyleSelector" class="style-grid"></div>
2299
+ </div>
2300
+ </div>
2301
+ </div>
2302
+ <div class="form-section">
2303
+ <h2><span class="section-number">3</span> <span data-lang-key="section3Title">Композиция и Детали</span></h2>
2304
+ <div class="form-grid">
2305
+ <div class="form-group full-width">
2306
+ <label data-lang-key="aspectRatio">Соотношение сторон</label>
2307
+ <div id="aspectRatioSelectorFurniture" class="aspect-ratio-grid">
2308
+ <button type="button" class="aspect-ratio-btn active" data-value="--ar 9:16"><div class="preview" style="width: 27px; height: 48px;"></div><span>9:16</span></button>
2309
+ <button type="button" class="aspect-ratio-btn" data-value="--ar 3:4"><div class="preview" style="width: 36px; height: 48px;"></div><span>3:4</span></button>
2310
+ <button type="button" class="aspect-ratio-btn" data-value="--ar 1:1"><div class="preview" style="width: 40px; height: 40px;"></div><span>1:1</span></button>
2311
+ <button type="button" class="aspect-ratio-btn" data-value="--ar 16:9"><div class="preview" style="width: 64px; height: 36px;"></div><span>16:9</span></button>
2312
+ </div>
2313
+ </div>
2314
+ <div class="form-group full-width">
2315
+ <label for="furniture_additional_prompt" data-lang-key="additionalDirectives">Дополнительные директивы</label>
2316
+ <textarea id="furniture_additional_prompt" data-lang-key-placeholder="additionalDirectivesPlaceholderObject"></textarea>
2317
+ </div>
2318
+ <div class="form-group full-width">
2319
+ <label data-lang-key="detailsVariations">Детали и Вариации</label>
2320
+ <div class="checkbox-group">
2321
+ <div class="checkbox-item">
2322
+ <input type="checkbox" id="furniture_detailsCollage">
2323
+ <label for="furniture_detailsCollage" data-lang-key="detailsCollageObject">Коллаж с увеличенными деталями (материал, текстура)</label>
2324
+ </div>
2325
+ <div class="checkbox-item">
2326
+ <input type="checkbox" id="furniture_anglesCollage">
2327
+ <label for="furniture_anglesCollage" data-lang-key="anglesCollageObject">Коллаж с разных ракурсов (спереди, сзади, сбоку)</label>
2328
+ </div>
2329
+ <div class="checkbox-item">
2330
+ <input type="checkbox" id="furniture_variantsCollage">
2331
+ <label for="furniture_variantsCollage" data-lang-key="variantsCollageObject">Разные варианты/цвета предмета</label>
2332
+ </div>
2333
+ <div>
2334
+ <div class="checkbox-item">
2335
+ <input type="checkbox" id="furniture_textOverlayCheck">
2336
+ <label for="furniture_textOverlayCheck" data-lang-key="textOverlayCheck">Наложение текста</label>
2337
+ </div>
2338
+ <textarea id="furniture_textOverlayInput" style="display:none; margin-top: 15px;" data-lang-key-placeholder="textOverlayPlaceholder"></textarea>
2339
+ </div>
2340
+ <div>
2341
+ <div class="checkbox-item">
2342
+ <input type="checkbox" id="logoOverlayCheck_furniture">
2343
+ <label for="logoOverlayCheck_furniture" data-lang-key="logoOverlayCheck">С логотипом</label>
2344
+ </div>
2345
+ <textarea id="logoOverlayInput_furniture" style="display:none; margin-top: 15px;" data-lang-key-placeholder="logoOverlayPlaceholder"></textarea>
2346
+ </div>
2347
+ </div>
2348
+ </div>
2349
+ </div>
2350
+ </div>
2351
+ </div>
2352
+
2353
  <div class="btn-container">
2354
  <button type="button" class="action-btn" onclick="processAndOpen()">
2355
  <span data-lang-key="launchBtn">Launch Synkris</span>
 
2371
 
2372
  const translations = {
2373
  ru: {
2374
+ subtitle: "PROMPT GENERATOR & LAUNCHER", modeModel: "Фото на модели", modeChildren: "Дети", modeObject: "Предмет", modeCosmetics: "Косметика", modeFurniture: "Мебель",
2375
  section1Title: "Параметры модели", section2Title: "Сцена и Стиль", section3Title: "Композиция и Детали", section1ObjectTitle: "Параметры объекта",
2376
+ section2ObjectTitle: "Сцена и Стиль", section1CosmeticsTitle: "Продукт и Модель", section1FurnitureTitle: "Параметры мебели",
2377
+ ownModelCheck: "Своя модель (использует 2 фото: одежду + модель)",
2378
  objectWithModelCheck: "С моделью", objectOnMannequinCheck: "На манекене", celebrityCheck: "Знаменитости", marketplaceCheck: "Режим маркетплейса",
2379
  celebrityName: "Знаменитость", gender: "Пол", gender_female: "Женщина", gender_male: "Мужчина", age: "Возраст", age_teen: "14-18 лет",
2380
  age_20_25: "20-25 лет", age_25_30: "25-30 лет", age_30_40: "30-40 лет", age_40_50: "40-50 лет", nationality: "Внешность/Этнос",
 
2395
  additionalDirectives: "Дополнительные директивы", additionalDirectivesPlaceholderModel: "Например: в кадре виден телефон последней модели, эффект мокрых волос...",
2396
  child_gender_girl: "Девочка", child_gender_boy: "Мальчик", child_age_infant: "6-12 месяцев", child_age_toddler: "2-4 года", child_age_child: "5-8 лет",
2397
  child_age_preteen: "9-12 лет", child_shot_full: "В полный рост", child_shot_medium: "По пояс", child_shot_portrait: "Портрет",
2398
+ childPoseAction: "Поза/Действие", child_pose_running: "Бежит по полю", child_pose_playing: "Играет с игрушками", child_pose_reading: "Сидит с китеп",
2399
  child_pose_posing: "Позирует для фото", child_pose_jumping: "Прыгает на кровати", childDetailsLabel: "Одежда и Де��али",
2400
  childDetailsPlaceholder: "Пример: джинсовый комбинезон с потертостями и металлическими пуговицами, вельветовая рубашка в рубчик",
2401
  additionalDirectivesPlaceholderChild: "Например: добавь инфографику с текстом 'organic cotton'", objectNameLabel: "Название/Описание предмета",
2402
  objectNamePlaceholder: "Например: флакон духов 'Noir', кроссовки 'CyberRun', часы 'Classic Timepiece'", cosmeticsNameLabel: "Название/Описание косметики",
2403
+ cosmeticsNamePlaceholder: "Например: красная помада 'Ruby', тональный крем 'Glow', палетка теней", furnitureNameLabel: "Название/Описание мебели",
2404
+ furnitureNamePlaceholder: "Например: кожаный диван Честерфилд, винтажный ковер, кресло Eames", styleBackground: "Стиль / Фон",
2405
  additionalDirectivesPlaceholderObject: "Например: добавить инфографику 'new collection', левитация предмета",
2406
  additionalDirectivesPlaceholderCosmetics: "Например: акцент на сиянии кожи, макро-кадр губ", detailsVariations: "Детали и Вариации",
2407
  detailsCollage: "Коллаж с увеличенными деталями (ткань, фурнитура)", detailsCollageObject: "Коллаж с увеличенными деталями (материал, текстура)",
 
2415
  wan27Check: "Wan 2.7 (Короткий промпт)", wan27Tooltip: 'вы можете отметить этот параметр и пользоваться новым видом качества , в поле выбора качества в поиске напишите "27" и у вас выйдет wan 2.7 image pro',
2416
  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': 'Нагорье (Шотландия)'},
2417
  object_styles: {'studio': 'Студия', 'minimalism': 'Минимализм', 'nature': 'Природа', 'luxe': 'Люкс', 'dark': 'Драма', 'geometric': 'Геометрия', 'floating': 'Левитация', 'lifestyle': 'Лайфстайл', 'splash': 'Всплеск', 'handmade': 'Мастерская', 'alaska_winter': 'Аляска (зима)', 'football_field': 'Футбольное поле', 'volcanic_ash_desert': 'Вулкан (Исландия)', 'salt_flats_mirage': 'Солончак (Боливия)', 'highlands_majesty': 'Нагорье (Шотландия)'},
2418
+ furniture_styles: {'scandinavian_minimalism': 'Скандинавский минимализм', 'mid_century_modern': 'Мид-сенчури модерн', 'industrial_loft': 'Индустриальный лофт', 'bohemian_chic': 'Бохо-шик', 'luxury_art_deco': 'Люкс Арт-Деко', 'wabi_sabi': 'Ваби-саби', 'cyberpunk_neon': 'Киберпанк (��еон)', 'surreal_dreamscape': 'Сюрреализм', 'cozy_cabin': 'Уютное шале', 'classic_elegance': 'Классическая элегантность', 'modern_outdoor': 'Терраса/улица'},
2419
  female_body_types: {'standard': 'Стандартное', 'very_slim': 'Очень стройное (модель)', 'slim': 'Стройное (натуральное)', 'slim_busty': 'Стройное с пышной грудью', 'athletic': 'Атлетичное', 'petite': 'Миниатюрное', 'hourglass': 'Песочные часы', 'fit_curvy': 'Спортивное (curvy)', 'plus_size': 'Пышные', 'curvy': 'Мягкое (curvy)', 'full_figured': 'Плюс-сайз', 'pregnant': 'Беременная (одежда для беременных)'},
2420
  male_body_types: {'athletic': 'Атлетичное', 'lean and toned': 'Поджарое', 'muscular build': 'Мускулистое', 'broad build': 'Крупное', 'slim build': 'Худощавое'},
2421
  female_hairstyles: {'long wavy hair': 'Длинные волнистые', 'short bob cut': 'Короткий боб', 'elegant updo': 'Элегантный пучок', 'straight shoulder-length hair': 'Прямые до плеч', 'pixie cut': 'Пикси', 'messy bun': 'Небрежный пучок', 'high ponytail': 'Высокий хвост', 'braids': 'Косы', 'curly afro': 'Афро кудри', 'bangs': 'С челкой', 'layered haircut': 'Каскад', 'wearing a hijab': 'В платке'},
 
2429
  celebrities_male: c_m, celebrities_female: c_f, child_celebrities_male: cc_m, child_celebrities_female: cc_f
2430
  },
2431
  kz: {
2432
+ subtitle: "PROMPT ГЕНЕРАТОРЫ ЖӘНЕ ІСКЕ ҚОСҚЫШ", modeModel: "Модельдегі фото", modeChildren: "Балалар", modeObject: "Зат", modeCosmetics: "Косметика", modeFurniture: "Жиһаз",
2433
  section1Title: "Модель параметрлері", section2Title: "Сахна және стиль", section3Title: "Композиция және бөлшектер", section1ObjectTitle: "Нысан параметрлері",
2434
+ section2ObjectTitle: "Сахна және стиль", section1CosmeticsTitle: "Өнім және модель", section1FurnitureTitle: "Жиһаз параметрлері",
2435
+ ownModelCheck: "Өз моделіңіз (2 фото қолданады: киім + модель)",
2436
  objectWithModelCheck: "Модельмен", objectOnMannequinCheck: "Манекенде", celebrityCheck: "Атақты адамдар", marketplaceCheck: "Маркетплейс режимі",
2437
  celebrityName: "Атақты адам", gender: "Жынысы", gender_female: "Әйел", gender_male: "Ер", age: "Жасы", age_teen: "14-18 жас",
2438
  age_20_25: "20-25 жас", age_25_30: "25-30 жас", age_30_40: "30-40 жас", age_40_50: "40-50 жас", nationality: "Сыртқы келбеті/Этнос",
 
2458
  childDetailsPlaceholder: "Мысалы: сыдырылған және металл түймелері бар джинсы комбинезон, вельвет жейде",
2459
  additionalDirectivesPlaceholderChild: "Мысалы: 'organic cotton' мәтіні бар инфографика қосу", objectNameLabel: "Заттың атауы/сипаттамасы",
2460
  objectNamePlaceholder: "Мысалы: 'Noir' иіссу құтысы, 'CyberRun' кроссовкасы, 'Classic Timepiece' сағаты", cosmeticsNameLabel: "Косметика атауы/сипаттамасы",
2461
+ cosmeticsNamePlaceholder: "Мысалы: қызыл далап 'Ruby', тоналды крем 'Glow', қабақ бояуы", furnitureNameLabel: "Жиһаздың атауы/сипаттамасы",
2462
+ furnitureNamePlaceholder: "Мысалы: былғары Честерфилд диваны, винтажды кілем", styleBackground: "Стиль / Фон",
2463
  additionalDirectivesPlaceholderObject: "Мысалы: 'new collection' инфографикасын қосу, заттың левитациясы",
2464
  additionalDirectivesPlaceholderCosmetics: "Мысалы: терінің жарқырауына назар аудару, еріннің макро-кадры", detailsVariations: "Бөлшектер және вариациялар",
2465
  detailsCollage: "Үлкейтіл��ен бөлшектері бар коллаж (мата, фурнитура)", detailsCollageObject: "Үлкейтілген бөлшектері бар коллаж (материал, текстура)",
 
2473
  wan27Check: "Wan 2.7 (Қысқа промпт)", wan27Tooltip: 'Бұл параметрді белгілеп, жаңа сапа түрін пайдалана аласыз, іздеу жолағына "27" деп жазыңыз, сонда wan 2.7 image pro шығады',
2474
  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': 'Таулы аймақ (Шотландия)'},
2475
  object_styles: {'studio': 'Студия', 'minimalism': 'Минимализм', 'nature': 'Табиғат', 'luxe': 'Люкс', 'dark': 'Драма', 'geometric': 'Геометрия', 'floating': 'Левитация', 'lifestyle': 'Лайфстайл', 'splash': 'Шашырау', 'handmade': 'Шеберхана', 'alaska_winter': 'Аляска (қыс)', 'football_field': 'Футбол алаңы', 'volcanic_ash_desert': 'Жанартау (Исландия)', 'salt_flats_mirage': 'Тұзды алқап (Боливия)', 'highlands_majesty': 'Таулы аймақ (Шотландия)'},
2476
+ furniture_styles: {'scandinavian_minimalism': 'Скандинавиялық минимализм', 'mid_century_modern': 'Мид-сенчури модерн', 'industrial_loft': 'Индустриалды лофт', 'bohemian_chic': 'Бохо-шик', 'luxury_art_deco': 'Люкс Арт-Деко', 'wabi_sabi': 'Ваби-саби', 'cyberpunk_neon': 'Киберпанк (неон)', 'surreal_dreamscape': 'Сюрреализм', 'cozy_cabin': 'Жайлы шале', 'classic_elegance': 'Классикалық элеганттылық', 'modern_outdoor': 'Терраса/дала'},
2477
  female_body_types: {'standard': 'Стандартты', 'very_slim': 'Өте сымбатты (модель)', 'slim': 'Сымбатты (табиғи)', 'slim_busty': 'Сымбатты, үлкен кеуделі', 'athletic': 'Атлетикалық', 'petite': 'Кішкентай', 'hourglass': 'Құм сағат', 'fit_curvy': 'Спорттық (curvy)', 'plus_size': 'Толық', 'curvy': 'Жұмсақ (curvy)', 'full_figured': 'Плюс-сайз', 'pregnant': 'Жүкті (жүкті әйелдерге арналған киім)'},
2478
  male_body_types: {'athletic': 'Атлетикалық', 'lean and toned': 'Шымыр', 'muscular build': 'Бұлшықетті', 'broad build': 'Ірі', 'slim build': 'Арық'},
2479
  female_hairstyles: {'long wavy hair': 'Ұзын толқынды', 'short bob cut': 'Қысқа боб', 'elegant updo': 'Элегантты жинақ', 'straight shoulder-length hair': 'Иыққа дейін түзу', 'pixie cut': 'Пикси', 'messy bun': 'Салғырт жинақ', 'high ponytail': 'Биік құйрық', 'braids': 'Өрімдер', 'curly afro': 'Афро бұйра', 'bangs': 'Кекілмен', 'layered haircut': 'Каскад', 'wearing a hijab': 'Орамалда'},
 
2487
  celebrities_male: c_m, celebrities_female: c_f, child_celebrities_male: cc_m, child_celebrities_female: cc_f
2488
  },
2489
  kg: {
2490
+ subtitle: "PROMPT ГЕНЕРАТОРУ ЖАНА ИШКЕ КИРГИЗГИЧ", modeModel: "Моделдеги сүрөт", modeChildren: "Балдар", modeObject: "Буюм", modeCosmetics: "Косметика", modeFurniture: "Эмерек",
2491
  section1Title: "Моделдин параметрлери", section2Title: "Сахна жана Стиль", section3Title: "Композиция жана Деталдар", section1ObjectTitle: "Объекттин параметрлери",
2492
+ section2ObjectTitle: "Сахна жана Стиль", section1CosmeticsTitle: "Продукт жана Модель", section1FurnitureTitle: "Эмерек параметрлери",
2493
+ ownModelCheck: "Өз моделиңиз (2 сүрөт колдонот: кийим + модель)",
2494
  objectWithModelCheck: "Модель менен", objectOnMannequinCheck: "Манекенде", celebrityCheck: "Атактуулар", marketplaceCheck: "Маркетплейс режимі",
2495
  celebrityName: "Атактуу", gender: "Жынысы", gender_female: "Аял", gender_male: "Эркек", age: "Жашы", age_teen: "14-18 жаш",
2496
  age_20_25: "20-25 жаш", age_25_30: "25-30 жаш", age_30_40: "30-40 жаш", age_40_50: "40-50 жас", nationality: "Сырткы көрүнүшү/Этнос",
 
2516
  childDetailsPlaceholder: "Мисалы: эскирген жана металл топчулары бар джинсы комбинезон, вельвет көйнөк",
2517
  additionalDirectivesPlaceholderChild: "Мисалы: 'organic cotton' тексти менен инфографика кошуу", objectNameLabel: "Буюмдун аталышы/сыпаттамасы",
2518
  objectNamePlaceholder: "Мисалы: 'Noir' атыр флакону, 'CyberRun' кроссовкасы, 'Classic Timepiece' сааты", cosmeticsNameLabel: "Косметиканын аталышы/сыпаттамасы",
2519
+ cosmeticsNamePlaceholder: "Мисалы: кызыл помада 'Ruby', тоналдык крем 'Glow', көз боёгу", furnitureNameLabel: "Эмеректин аталышы/сыпаттамасы",
2520
+ furnitureNamePlaceholder: "Мисалы: булгаары Честерфилд диваны, винтаж килем", styleBackground: "Стиль / Фон",
2521
  additionalDirectivesPlaceholderObject: "Мисалы: 'new collection' инфографикасын кошуу, буюмдун левитациясы",
2522
  additionalDirectivesPlaceholderCosmetics: "Мисалы: теринин жаркырашына басым, эриндин макро-кадры", detailsVariations: "Деталдар жана вариациялар",
2523
  detailsCollage: "Чоңойтулган деталдары менен коллаж (кездеме, фурнитура)", detailsCollageObject: "Чоңойтулган деталдары менен коллаж (материал, текстура)",
 
2531
  wan27Check: "Wan 2.7 (Кыска промпт)", wan27Tooltip: 'Бул параметрди белгилеп, жаңы сапат түрүн колдоно аласыз, издөө тилкесине "27" деп жазыңыз, ошондо wan 2.7 image pro чыгат',
2532
  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': 'Тоолуу аймак (Шотландия)'},
2533
  object_styles: {'studio': 'Студия', 'minimalism': 'Минимализм', 'nature': 'Жаратылыш', 'luxe': 'Люкс', 'dark': 'Драма', 'geometric': 'Геометрия', 'floating': 'Левитация', 'lifestyle': 'Лайфстайл', 'splash': 'Чачыроо', 'handmade': 'Устакана', 'alaska_winter': 'Аляска (кыш)', 'football_field': 'Футбол талаасы', 'volcanic_ash_desert': 'Вулкан (Исландия)', 'salt_flats_mirage': 'Туздуу түздүк (Боливия)', 'highlands_majesty': 'Тоолуу аймак (Шотландия)'},
2534
+ furniture_styles: {'scandinavian_minimalism': 'Скандинавиялык минимализм', 'mid_century_modern': 'Мид-сенчури модерн', 'industrial_loft': 'Индустриалдык лофт', 'bohemian_chic': 'Бохо-шик', 'luxury_art_deco': 'Люкс Арт-Деко', 'wabi_sabi': 'Ваби-саби', 'cyberpunk_neon': 'Киберпанк (неон)', 'surreal_dreamscape': 'Сюрреализм', 'cozy_cabin': 'Жайлуу шале', 'classic_elegance': 'Классикалык элеганттуулук', 'modern_outdoor': 'Терраса/сырт'},
2535
  female_body_types: {'standard': 'Стандарттуу', 'very_slim': 'Абдан сымбаттуу (модель)', 'slim': 'Сымбаттуу (табигый)', 'slim_busty': 'Сымбаттуу, чоң төштүү', 'athletic': 'Атлетикалык', 'petite': 'Кичинекей', 'hourglass': 'Кум саат', 'fit_curvy': 'Спорттук (curvy)', 'plus_size': 'Толук', 'curvy': 'Жумшак (curvy)', 'full_figured': 'Плюс-сайз', 'pregnant': 'Кош бойлуу (кош бойлуулар үчүн кийим)'},
2536
  male_body_types: {'athletic': 'Атлетикалык', 'lean and toned': 'Чымыр', 'muscular build': 'Булчуңдуу', 'broad build': 'Чоң', 'slim build': 'Арык'},
2537
  female_hairstyles: {'long wavy hair': 'Узун толкундуу', 'short bob cut': 'Кыска боб', 'elegant updo': 'Элеганттуу түймөк', 'straight shoulder-length hair': 'Ийинге чейин түз', 'pixie cut': 'Пикси', 'messy bun': 'Шалакы түймөк', 'high ponytail': 'Бийик куйрук', 'braids': 'Өрүмдөр', 'curly afro': 'Афро тармал', 'bangs': 'Кекил менен', 'layered haircut': 'Каскад', 'wearing a hijab': 'Жоолукта'},
 
2557
  'object_shotType', 'wan27Check_object',
2558
  'cosmetics_gender', 'cosmetics_age', 'cosmetics_nationality', 'cosmetics_bodyType', 'cosmetics_hairColor', 'cosmetics_hairstyle', 'cosmetics_eyeColor',
2559
  'hasBeard_cosmetics', 'beardStyle_cosmetics', 'hasTattoos_cosmetics', 'tattooStyle_cosmetics', 'tattooCoverage_cosmetics',
2560
+ 'cosmetics_shotType', 'wan27Check_cosmetics',
2561
+ 'furniture_gender', 'furniture_age', 'furniture_nationality', 'furniture_bodyType', 'furniture_hairColor', 'furniture_hairstyle', 'furniture_eyeColor',
2562
+ 'hasBeard_furniture', 'beardStyle_furniture', 'hasTattoos_furniture', 'tattooStyle_furniture', 'tattooCoverage_furniture',
2563
+ 'furniture_shotType', 'wan27Check_furniture'
2564
  ];
2565
 
2566
  function saveSettings() {
 
2597
  updateChildModelOptions();
2598
  updateObjectModelOptions();
2599
  updateCosmeticsModelOptions();
2600
+ updateFurnitureModelOptions();
2601
 
2602
+ ['bodyType', 'hairstyle', 'beardStyle_model', 'child_hairstyle', 'object_bodyType', 'object_hairstyle', 'beardStyle_object', 'cosmetics_bodyType', 'cosmetics_hairstyle', 'beardStyle_cosmetics', 'furniture_bodyType', 'furniture_hairstyle', 'beardStyle_furniture'].forEach(id => {
2603
  const el = document.getElementById(id);
2604
  if (el && settings[id] !== undefined) {
2605
  el.value = settings[id];
2606
  }
2607
  });
2608
 
2609
+ ['hasBeard_model', 'hasTattoos_model', 'hasBeard_object', 'hasTattoos_object', 'hasBeard_cosmetics', 'hasTattoos_cosmetics', 'hasBeard_furniture', 'hasTattoos_furniture'].forEach(id => {
2610
  const el = document.getElementById(id);
2611
  if(el) el.dispatchEvent(new Event('change'));
2612
  });
 
2646
  populateStyles('childStyleSelector', langData.flagship_styles);
2647
  populateStyles('objectStyleSelector', langData.object_styles);
2648
  populateStyles('cosmeticsStyleSelector', langData.object_styles);
2649
+ populateStyles('furnitureStyleSelector', langData.furniture_styles);
2650
 
2651
  updateModelOptions();
2652
  updateObjectModelOptions();
2653
  updateCosmeticsModelOptions();
2654
+ updateFurnitureModelOptions();
2655
  updateChildModelOptions();
2656
  updateCelebrityOptions();
2657
  updateChildCelebrityOptions();
2658
  updateObjectCelebrityOptions();
2659
  updateCosmeticsCelebrityOptions();
2660
+ updateFurnitureCelebrityOptions();
2661
 
2662
  document.querySelectorAll('.lang-switcher button').forEach(btn => btn.classList.remove('active'));
2663
  document.getElementById(`lang-${lang}`).classList.add('active');
 
2762
  populateSelect(document.getElementById('tattooCoverage_cosmetics'), langData.tattoo_coverages);
2763
  }
2764
 
2765
+ function updateFurnitureModelOptions() {
2766
+ const lang = localStorage.getItem('synkrisLang') || 'ru';
2767
+ const langData = translations[lang];
2768
+
2769
+ const gender = document.getElementById('furniture_gender').value;
2770
+ const bodyTypeSelect = document.getElementById('furniture_bodyType');
2771
+ const hairstyleSelect = document.getElementById('furniture_hairstyle');
2772
+
2773
+ populateSelect(bodyTypeSelect, gender === 'female' ? langData.female_body_types : langData.male_body_types);
2774
+ populateSelect(hairstyleSelect, gender === 'female' ? langData.female_hairstyles : langData.male_hairstyles);
2775
+
2776
+ document.getElementById('beardSection_furniture').style.display = gender === 'male' ? 'block' : 'none';
2777
+ if (gender === 'female') {
2778
+ const beardCheckbox = document.getElementById('hasBeard_furniture');
2779
+ if (beardCheckbox.checked) {
2780
+ beardCheckbox.checked = false;
2781
+ beardCheckbox.dispatchEvent(new Event('change'));
2782
+ }
2783
+ }
2784
+
2785
+ populateSelect(document.getElementById('beardStyle_furniture'), langData.beard_styles);
2786
+ populateSelect(document.getElementById('tattooStyle_furniture'), langData.tattoo_styles);
2787
+ populateSelect(document.getElementById('tattooCoverage_furniture'), langData.tattoo_coverages);
2788
+ }
2789
+
2790
  function updateChildModelOptions() {
2791
  const lang = localStorage.getItem('synkrisLang') || 'ru';
2792
  const langData = translations[lang];
 
2847
  populateSelect(select, gender === 'female' ? langData.celebrities_female : langData.celebrities_male);
2848
  }
2849
 
2850
+ function updateFurnitureCelebrityOptions() {
2851
+ const lang = localStorage.getItem('synkrisLang') || 'ru';
2852
+ const langData = translations[lang];
2853
+ const gender = document.getElementById('furnitureCelebrityGender').value;
2854
+ const select = document.getElementById('furnitureCelebrityName');
2855
+
2856
+ populateSelect(select, gender === 'female' ? langData.celebrities_female : langData.celebrities_male);
2857
+ }
2858
 
2859
  function toggleOwnModel(isOwnModel) {
2860
  const modelParamsContainer = document.getElementById('modelParamsContainer');
 
3133
  prompt += `\\n\\n**COMPOSITION DIRECTIVE (4-VIEW COLLAGE):** Create a professional 4-view collage in a single image. The collage must clearly show the model wearing the garment from four distinct angles: full front view, full back view, full side view, and three-quarter view. Maintain consistent lighting and background across all views.`;
3134
  }
3135
  if (wantsVariantsCollage) {
3136
+ prompt += `\\n\\n**COMPOSITION DIRECTIVE (VARIANTS COLLAGE):** In a single, cohesive frame, display multiple models (or one model in different poses) showcasing the garment in ALL the different colors present in the reference image. **CRITICAL COLOR PROTOCOL: Use ONLY the exact colors shown in the reference photo. You must include every color present, do not duplicate any colors, and absolutely DO NOT hallucinate, invent, or add new colors that are not explicitly present in the source image.** The result must be aharmonious and balanced collage.`;
3137
  }
3138
  if (wantsTextOverlay && textToOverlay) {
3139
  prompt += `\\n\\n**GRAPHIC OVERLAY:** Add the following text: "${textToOverlay}". Integrate it stylishly using modern, clean typography. The text should be legible but artistically placed to complement the image, not dominate it. Minimalist icons that enhance the text are permissible.`;
 
3374
  if (wantsLogoOverlay && logoToOverlay) {
3375
  prompt += `\\n\\n**LOGO INTEGRATION DIRECTIVE:** A high-resolution logo described as '${logoToOverlay}' is tastefully placed on the image, typically in a corner, ensuring it complements the composition without being distracting.`;
3376
  }
3377
+ } else if (currentMode === 'furniture') {
3378
+ const withModel = document.getElementById('furnitureWithModelCheck').checked;
3379
+ const wantsMarketplace = document.getElementById('marketplaceCheck_furniture').checked;
3380
+ const furnitureName = document.getElementById('furniture_name').value || "the furniture piece";
3381
+ const isWan27 = document.getElementById('wan27Check_furniture') && document.getElementById('wan27Check_furniture').checked;
3382
+ const styleKey = document.querySelector('#furnitureStyleSelector .style-btn.active').dataset.value;
3383
+ const stylePrompt = promptsData.furniture_styles[styleKey];
3384
+ additionalPrompt = document.getElementById('furniture_additional_prompt').value;
3385
+ aspectRatio = document.querySelector('#aspectRatioSelectorFurniture .aspect-ratio-btn.active').dataset.value;
3386
+
3387
+ if (isWan27) {
3388
+ const additionalPromptWan = document.getElementById('furniture_additional_prompt').value;
3389
+ let shortPrompt = "High-end architectural digest photography, hyper-realistic interior shot. ";
3390
+
3391
+ if (withModel) {
3392
+ const shotType = document.getElementById('furniture_shotType').value;
3393
+ shortPrompt += `Model interacting naturally with the furniture (${furnitureName}). `;
3394
+ if (document.getElementById('furnitureCelebrityCheck').checked) {
3395
+ shortPrompt += `Model is a flawless ${document.getElementById('furnitureCelebrityName').value} lookalike. `;
3396
+ }
3397
+ shortPrompt += `Shot as ${shotType}, showing a lifestyle scene. `;
3398
+ } else {
3399
+ shortPrompt += `Furniture: ${furnitureName}. Beautifully staged in an interior scene. `;
3400
+ }
3401
+
3402
+ shortPrompt += `Setting: ${styleKey.replace(/_/g, ' ')} interior style. Photorealistic lighting, global illumination, ray-traced reflections, sharp focus, masterpiece, 8k resolution. `;
3403
+
3404
+ if (aspectRatio.includes("9:16")) shortPrompt += "Strictly vertical 9:16 composition. ";
3405
+ else if (aspectRatio.includes("16:9")) shortPrompt += "Cinematic horizontal 16:9 composition. ";
3406
+ else if (aspectRatio.includes("1:1")) shortPrompt += "Square 1:1 format. ";
3407
+ else if (aspectRatio.includes("3:4")) shortPrompt += "Vertical 3:4 portrait orientation. ";
3408
+
3409
+ let addOns = [];
3410
+ if (additionalPromptWan) addOns.push(additionalPromptWan);
3411
+ if (document.getElementById('furniture_detailsCollage').checked) addOns.push("formatted as a split-screen collage with close-up macro shots of material details (wood grain, fabric weave)");
3412
+ if (document.getElementById('furniture_anglesCollage').checked) addOns.push("formatted as a multi-panel collage showing different angles");
3413
+ if (document.getElementById('furniture_variantsCollage').checked) addOns.push("formatted as a collage showing all color/material variants explicitly present in the reference image");
3414
+
3415
+ const wantsTextOverlay = document.getElementById('furniture_textOverlayCheck').checked;
3416
+ const textToOverlay = document.getElementById('furniture_textOverlayInput').value.trim();
3417
+ const wantsLogoOverlay = document.getElementById('logoOverlayCheck_furniture').checked;
3418
+ const logoToOverlay = document.getElementById('logoOverlayInput_furniture').value.trim();
3419
+
3420
+ if (wantsTextOverlay && textToOverlay) addOns.push(`incorporating stylish text overlay that says "${textToOverlay}"`);
3421
+ if (wantsLogoOverlay && logoToOverlay) addOns.push(`incorporating a logo (${logoToOverlay})`);
3422
+
3423
+ if (addOns.length > 0) shortPrompt += " " + addOns.join(", ") + ". ";
3424
+ shortPrompt += aspectRatio;
3425
+ return `${shortPrompt.replace(/\s+/g, ' ').trim()}`;
3426
+ }
3427
+
3428
+ if (withModel) {
3429
+ prompt = promptsData.base_prompts.model_base;
3430
+ const isCelebrity = document.getElementById('furnitureCelebrityCheck').checked;
3431
+
3432
+ prompt += `\\n\\n**SCENE & STYLE:** The scene is a ${styleKey} setting. ${stylePrompt}`;
3433
+
3434
+ if (isCelebrity) {
3435
+ const celebNameKey = document.getElementById('furnitureCelebrityName').value;
3436
+ prompt += celebrityPromptTemplate(celebNameKey);
3437
+ } else {
3438
+ const gender = document.getElementById('furniture_gender').value;
3439
+ const age = document.getElementById('furniture_age').value;
3440
+ const nationality = document.getElementById('furniture_nationality').value;
3441
+ const bodyType = document.getElementById('furniture_bodyType').value;
3442
+ const hairColor = document.getElementById('furniture_hairColor').value;
3443
+ const hairstyle = document.getElementById('furniture_hairstyle').value;
3444
+ const eyeColor = document.getElementById('furniture_eyeColor').value;
3445
+ let modelExtraDetails = [];
3446
+ if(document.getElementById('hasTattoos_furniture').checked){
3447
+ modelExtraDetails.push(document.getElementById('tattooCoverage_furniture').value + " in a " + document.getElementById('tattooStyle_furniture').value + " style");
3448
+ }
3449
+ if(gender === 'male' && document.getElementById('hasBeard_furniture').checked){
3450
+ modelExtraDetails.push("with a " + document.getElementById('beardStyle_furniture').value);
3451
+ }
3452
+ let detailsString = modelExtraDetails.length > 0 ? ", " + modelExtraDetails.join(", ") : "";
3453
+ prompt += `\\n\\n**MODEL(S) SPECIFICATIONS:**\\n- model: ${age} ${gender}, ${nationality} appearance, with ${hairColor}, ${hairstyle}, and ${eyeColor}, and a realistic, ${bodyType} body type${detailsString}.`;
3454
+ }
3455
+ const shotType = document.getElementById('furniture_shotType').value;
3456
+ prompt += `\\n\\n**ACTION & COMPOSITION:** The model is interacting naturally with the ${furnitureName} (e.g., sitting on a chair, lounging on a sofa, placing an object on a table). The model should look comfortable and enhance the aspirational lifestyle quality of the scene. The furniture piece remains the hero of the shot. The model is wearing stylish, complementary, but simple clothing that does not distract from the furniture.`;
3457
+ prompt += `\\n- Perspective: ${shotType}`;
3458
+ } else {
3459
+ prompt = promptsData.base_prompts.furniture_base;
3460
+ prompt += `\\n\\n**SCENE & STYLE:** The furniture piece, ${furnitureName}, is perfectly staged in a ${styleKey} interior. ${stylePrompt}`;
3461
+ }
3462
+
3463
+ if (wantsMarketplace) {
3464
+ prompt += promptsData.base_prompts.marketplace_mode_base.replace(/swirls of fabric|splash of a complementary liquid|glowing light trails/g, "subtle ambient light effects, like soft god rays or elegant floating dust motes");
3465
+ }
3466
+
3467
+ const wantsDetailsCollage = document.getElementById('furniture_detailsCollage').checked;
3468
+ const wantsAnglesCollage = document.getElementById('furniture_anglesCollage').checked;
3469
+ const wantsVariantsCollage = document.getElementById('furniture_variantsCollage').checked;
3470
+ const wantsTextOverlay = document.getElementById('furniture_textOverlayCheck').checked;
3471
+ const textToOverlay = document.getElementById('furniture_textOverlayInput').value.trim();
3472
+ const wantsLogoOverlay = document.getElementById('logoOverlayCheck_furniture').checked;
3473
+ const logoToOverlay = document.getElementById('logoOverlayInput_furniture').value.trim();
3474
+
3475
+ if (wantsDetailsCollage) {
3476
+ prompt += `\\n\\n**COMPOSITION DIRECTIVE (DETAILS COLLAGE):** Create a high-end collage. The main image features the full furniture piece in its setting. Add 2-3 smaller inset images showcasing ultra-close-up shots of material texture (wood grain, fabric weave, leather pores) and craftsmanship details (joinery, stitching).`;
3477
+ }
3478
+ if (wantsAnglesCollage) {
3479
+ prompt += `\\n\\n**COMPOSITION DIRECTIVE (MULTI-ANGLE COLLAGE):** Create a professional multi-angle collage in a single image. The collage must clearly show the furniture from distinct angles (front view, side view, three-quarter view). Maintain consistent lighting and environment across all views.`;
3480
+ }
3481
+ if (wantsVariantsCollage) {
3482
+ prompt += `\\n\\n**COMPOSITION DIRECTIVE (VARIANTS SHOWCASE):** In a single, cohesive frame, display the furniture in ALL the different colors/materials present in the reference image. **CRITICAL PROTOCOL: Use ONLY the exact variants shown in the reference photo. You must include every variant present, do not duplicate any, and absolutely DO NOT hallucinate new ones.** The result must be a harmonious and balanced showcase.`;
3483
+ }
3484
+ if (wantsTextOverlay && textToOverlay) {
3485
+ prompt += `\\n\\n**GRAPHIC OVERLAY:** Add the following text: "${textToOverlay}". Integrate it stylishly using elegant, minimalist typography suitable for a luxury furniture brand.`;
3486
+ }
3487
+ if (wantsLogoOverlay && logoToOverlay) {
3488
+ prompt += `\\n\\n**LOGO INTEGRATION DIRECTIVE:** A high-resolution logo described as '${logoToOverlay}' is tastefully placed on the image, typically in a corner, ensuring it complements the composition without being distracting.`;
3489
+ }
3490
  }
3491
 
3492
  if (additionalPrompt) {
 
3496
  return `${prompt} ${aspectRatio}`.trim();
3497
  }
3498
 
 
3499
  async function processAndOpen() {
3500
  const lang = localStorage.getItem('synkrisLang') || 'ru';
3501
  const langData = translations[lang];
 
3543
  }
3544
  });
3545
 
3546
+ ['model', 'children', 'object', 'cosmetics', 'furniture'].forEach(prefix => {
3547
  const textCheck = document.getElementById(`${prefix}_textOverlayCheck`);
3548
  const textInput = document.getElementById(`${prefix}_textOverlayInput`);
3549
  const logoCheck = document.getElementById(`logoOverlayCheck_${prefix}`);
 
3597
  if (this.checked) {
3598
  objectOnMannequinCheck.checked = false;
3599
  }
 
3600
  const isChecked = this.checked;
3601
  const celebrityToggle = document.getElementById('objectCelebrityToggle');
3602
  const celebrityParams = document.getElementById('objectCelebrityParamsContainer');
3603
  const modelParams = document.getElementById('objectModelParamsContainer');
3604
  const isCelebrityChecked = document.getElementById('objectCelebrityCheck').checked;
 
3605
  celebrityToggle.style.display = isChecked ? 'flex' : 'none';
 
3606
  if (isChecked && isCelebrityChecked) {
3607
  modelParams.style.display = 'none';
3608
  celebrityParams.classList.add('active');
 
3613
  modelParams.style.display = 'none';
3614
  celebrityParams.classList.remove('active');
3615
  }
 
3616
  if (!isChecked) {
3617
  document.getElementById('objectCelebrityCheck').checked = false;
3618
  celebrityParams.classList.remove('active');
3619
  }
3620
  });
3621
 
 
3622
  objectOnMannequinCheck.addEventListener('change', function() {
3623
  if (this.checked && objectWithModelCheck.checked) {
3624
  objectWithModelCheck.checked = false;
 
3643
  updateCosmeticsCelebrityOptions();
3644
  }
3645
  });
3646
+
3647
+ document.getElementById('furnitureWithModelCheck').addEventListener('change', function() {
3648
+ const isChecked = this.checked;
3649
+ const celebrityToggle = document.getElementById('furnitureCelebrityToggle');
3650
+ const celebrityParams = document.getElementById('furnitureCelebrityParamsContainer');
3651
+ const modelParams = document.getElementById('furnitureModelParamsContainer');
3652
+ const isCelebrityChecked = document.getElementById('furnitureCelebrityCheck').checked;
3653
 
3654
+ celebrityToggle.style.display = isChecked ? 'flex' : 'none';
3655
+
3656
+ if (isChecked && isCelebrityChecked) {
3657
+ modelParams.style.display = 'none';
3658
+ celebrityParams.classList.add('active');
3659
+ } else if (isChecked && !isCelebrityChecked) {
3660
+ modelParams.style.display = 'grid';
3661
+ celebrityParams.classList.remove('active');
3662
+ } else {
3663
+ modelParams.style.display = 'none';
3664
+ celebrityParams.classList.remove('active');
3665
+ }
3666
+
3667
+ if (!isChecked) {
3668
+ document.getElementById('furnitureCelebrityCheck').checked = false;
3669
+ celebrityParams.classList.remove('active');
3670
+ }
3671
+ });
3672
+
3673
+ document.getElementById('furnitureCelebrityCheck').addEventListener('change', function() {
3674
+ const isChecked = this.checked;
3675
+ document.getElementById('furnitureCelebrityParamsContainer').classList.toggle('active', isChecked);
3676
+ document.getElementById('furnitureModelParamsContainer').style.display = isChecked ? 'none' : 'grid';
3677
+ if (isChecked) {
3678
+ updateFurnitureCelebrityOptions();
3679
+ }
3680
+ });
3681
+
3682
+ ['model', 'object', 'cosmetics', 'furniture'].forEach(prefix => {
3683
+ const hasTattoosCheckbox = document.getElementById(`hasTattoos_${prefix}`);
3684
+ if(hasTattoosCheckbox) {
3685
+ hasTattoosCheckbox.addEventListener('change', function() {
3686
+ document.getElementById(`tattooOptions_${prefix}`).style.display = this.checked ? 'flex' : 'none';
3687
+ });
3688
+ }
3689
  const hasBeardCheckbox = document.getElementById(`hasBeard_${prefix}`);
3690
  if(hasBeardCheckbox) {
3691
  hasBeardCheckbox.addEventListener('change', function() {