## πŸš€ ОбновлСния v0.12.21: Пилюля ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° Π² ΠΊΠΎΠΌΠΏΠΎΠ·Π΅Ρ€Π΅ ΠΈ ΠΌΠΎΠ΄Π°Π»ΠΊΠ° Regenerate (#501, #502) - **Быстрый ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° Π² ΠΊΠΎΠΌΠΏΠΎΠ·Π΅Ρ€Π΅ Ρ‡Π°Ρ‚Π° (#501)**: Пилюля Π² слотС `conversation.input.right` с Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΌ списком ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² ΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ для ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π±Π΅Π· Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ‡Π°Ρ‚Π°. - **Модалка Regenerate с Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠΌΠΏΡ‚Π° Π² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅ (#502)**: Кнопка `πŸ”„ Regenerate…` прямо Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅ изобраТСния позволяСт ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΌΠΏΡ‚, Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ сохранСниС ΠΈΠ»ΠΈ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΡƒΡŽ смСну сида ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ. ## πŸš€ ОбновлСния v0.12.20: Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ A/B сплит-слайдСр ΠΈ ΠΊΠ°Ρ€ΡƒΡΠ΅Π»ΡŒ Ρ€Π΅Π²ΠΈΠ·ΠΈΠΉ (#499, #500) - **Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ A/B Π‘ΠΏΠ»ΠΈΡ‚-слайдСр Π² Ρ‡Π°Ρ‚Π΅ (#499)**: Π‘ΠΏΠ»ΠΈΡ‚-слайдСр Β«Π”ΠΎ / ПослС» с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠΈ Ρ‚Π°Ρ‡-ТСстов, пСрСтаскиваСмым Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΈ ΠΏΠΎΠ»ΡƒΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌΠΈ Π±Π΅ΠΉΠ΄ΠΆΠ°ΠΌΠΈ. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΡ€ΠΈ рСставрации Π»ΠΈΡ†, ΠΈΠ½ΠΏΠ΅ΠΉΠ½Ρ‚ΠΈΠ½Π³Π΅, рСмиксах ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹Ρ… гСнСрациях. - **ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Π°Ρ ΠΊΠ°Ρ€ΡƒΡΠ΅Π»ΡŒ Ρ€Π΅Π²ΠΈΠ·ΠΈΠΉ Π² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅ (#500)**: ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»ΡŒ истории вСрсий `< v1 / N >` с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ сида/Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ автоматичСским ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² `localStorage` Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° (Π΄ΠΎ 20 вСрсий Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΡƒ) ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°ΠΌΠΈ страницы. # πŸ“¦ @goodandready/dsh-image-gen

ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½Ρ‹ΠΉ графичСский ΠΊΠΎΠΌΠ±Π°ΠΉΠ½ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ для DeepSeek Harness

npm version license DSH Plugin Node version

ВсС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π°Π²Ρ‚ΠΎΡ€Π°

πŸ‡¬πŸ‡§ English β€’ πŸ‡·πŸ‡Ί Русский β€’ πŸ‡¨πŸ‡³ δΈ­ζ–‡θ―΄ζ˜Ž

⭐ Если Π²Π°ΠΌ нравится этот ΠΏΠ»Π°Π³ΠΈΠ½, ΠΏΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π΅ΠΌΡƒ Π·Π²Π΅Π·Π΄Ρƒ Π½Π° GitHub β€” это ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΌΠ½Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ Π²Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠΎΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ мСня Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ дальшС.

πŸ› Если Π²Ρ‹ нашли Π±Π°Π³ ΠΈΠ»ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π», создайтС issue Π½Π° GitHub Π½Π° любом языкС β€” я Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€ΡŽ вашС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсий ΠΏΠ»Π°Π³ΠΈΠ½Π°.
--- ## πŸš€ ОбновлСния v0.12.12: ПанСль Image Studio Π² ΠΏΡ€Π°Π²ΠΎΠΌ сайдбарС ΠΈ сСссионная каталогизация (#452, #453) - **Нативная панСль Image Studio Π² ΠΏΡ€Π°Π²ΠΎΠΌ сайдбарС (#452)**: ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ слот `sidebarRightTabs` ΠΈ `sidebar.right.pane.tab` с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ `dsh-image-studio`. Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стилСй, Ρ‡ΠΈΠΏΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ для Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΌΠΏΡ‚Π°, сСлСкторы ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°, ΠΌΠΎΠ΄Π΅Π»ΠΈ, aspect ratio, чСкбокс ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ Ρ„ΠΎΠ½Π°, ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΡƒΡŽ сСтку Π½Π΅Π΄Π°Π²Π½ΠΈΡ… Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ быстрыС дСйствия: ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡƒΡ‚ΠΈ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΠΈ вставка Markdown-ссылки Π² Ρ‡Π°Ρ‚. - **БСссионная каталогизация ΠΈ сСмантичСскоС ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ (#453)**: Настройка `organizeBySession: boolean` (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ `true`) сохраняСт ассСты Π² `/assets/images//`. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ `buildSemanticSlug` Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ чистыС Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Π΅ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° основС сущностСй ΠΏΡ€ΠΎΠΌΠΏΡ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `futuristic-hero-banner-cyberpunk-v1.png`) с ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Π² Asset Vault. ## πŸš€ ОбновлСния v0.12.9: Полная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с DSH Desktop Electron (#478) - **Авторизация кастомной схСмы DSH Desktop**: Π Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `isTrustedLocalRequest`, `getRouteRejectionStatus` ΠΈ `getRouteWriteRejectionStatus` для Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ схСмы `dsh-app://app/` ΠΏΡ€ΠΈ loopback-соСдинСниях. - **Π Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° эндпоинтов ΠΈ ΠΏΡ€Π΅Π²ΡŒΡŽ**: УстранСна ошибка HTTP 403 Forbidden Π² DSH Desktop для ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² `/dsh-image-gen/image`, `/dsh-image-gen/approval`, `/dsh-image-gen/vault` ΠΈ `/dsh-image-gen/config`, восстанавливая ΠΏΠΎΠΊΠ°Π· ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ, Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Approval Gate ΠΈ Studio Vault Π² дСсктопном ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅. - **Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ строгого Π³Π΅ΠΉΡ‚Π° бСзопасности**: Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ LAN-запросы с ΠΏΠΎΠ΄Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ ΠΈ Π½Π΅Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ схСмы/хосты бСзусловно Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ΠΊΠΎΠ΄ΠΎΠΌ 403 Forbidden. ## πŸš€ ОбновлСния v0.12.8: Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ шлюз подтвСрТдСния Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ (#450) - **Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ шлюз подтвСрТдСния**: Π—Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ нСсанкционированного ΠΈΠ»ΠΈ случайного расхода баланса ΠΏΡ€ΠΈ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Π°Π³Π΅Π½Ρ‚Π°. Настройки `requireApproval: boolean` (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ `false`) ΠΈ `approvalTimeoutSec: number` (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ `120`, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ 5-600) Π² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅ настроСк Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Β«Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΒ». - **Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π°Ρ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° `FalApprovalCard`**: ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π² Ρ‡Π°Ρ‚Π΅ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΡƒ с ΠΏΠ»Π°Π½ΠΎΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ (ΠΏΡ€ΠΎΠΌΠΏΡ‚, ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€, модСль, Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠ°Π΄Ρ€Π° ΠΈ расчётная ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Π² USD) ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ `[πŸš€ ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ]` ΠΈ `[✏️ Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ]`. - **БСзопасный ΠΎΡ‚ΠΊΠ°Ρ‚ ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ эндпоинт**: НулСвой расход Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π° ΠΏΡ€ΠΈ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Π΅ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΌΠ΅Π½Π΅; координация Ρ‡Π΅Ρ€Π΅Π· Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ `/dsh-image-gen/approval`. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° `approved: true` для явного подтвСрТдСния Π°Π³Π΅Π½Ρ‚ΠΎΠΌ. ## πŸš€ ОбновлСния v0.12.5: ΠšΠΎΠ½ΡΠΈΡΡ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ пСрсонаТСй ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ° тяТСлых ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (#456, #458) * **Бквозная Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΊΠΎΠ½ΡΠΈΡΡ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ пСрсонаТСй (`reference_image`, `reference_strength`) (#458)**: Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ рСфСрСнсного изобраТСния (URL, Ρ„Π°ΠΉΠ», data URI, Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅) с Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ силой влияния (0.1–1.0) Π² `generate_image`. АвтоматичСскоС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ FAL Π½Π° FLUX Redux (`fal-ai/flux/dev/redux`), привязка multimodal reference Π² Seedream, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° `--cref --cw ` Π² Midjourney ΠΈ IP-Adapter вСсов Π² Replicate. * **Π—Π°Ρ‰ΠΈΡ‚Π° контСкстного ΠΎΠΊΠ½Π° ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠ° тяТСлых ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (#456)**: АвтоматичСский ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ тяТСлых inline base64 data URI ΠΈ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² с Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹Π΅ ссылки `/dsh-image-gen/image?id=...`, ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ контСкста LLM Π² Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… сСссиях Π΄ΠΈΠ°Π»ΠΎΠ³Π°. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ всСх ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ. ## πŸš€ ОбновлСния v0.11.9: Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ структуры запроса ComfyUI (#322, GitHub #7) * **УстранСниС Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ влоТСния ΠΏΡ€ΠΎΠΌΠΏΡ‚Π° Π² ComfyUI**: Π’ `lib/providers/backends/local.js` устранСна лишняя ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠ° `{ prompt: workflow }`, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ²ΡˆΠ°Ρ ΠΊ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ `{ prompt: { prompt: workflowGraph } }` ΠΈ ошибкС ComfyUI `missing_node_type: Node 'ID #prompt' has no class_type`. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° прСвСнтивная валидация Π³Ρ€Π°Ρ„Π° Π½ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ. ## πŸš€ ОбновлСния v0.11.8: Π—Π°Ρ‰ΠΈΡ‚Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ², ΠΏΠ°Ρ€ΠΈΡ‚Π΅Ρ‚ сборки ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Π°Ρ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° * **ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ‚Π΅Π»Π° настроСк (#313)**: ΠœΠ°Ρ€ΡˆΡ€ΡƒΡ‚ `PUT /dsh-image-gen/config` Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½ Π»ΠΈΠΌΠΈΡ‚ΠΎΠΌ 64 ΠšΠ‘ с Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ HTTP 413 `Payload Too Large` ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΠΈ, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ DoS ядра Ρ‡Π΅Ρ€Π΅Π· исчСрпаниС ΠΊΡƒΡ‡ΠΈ. * **ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ΠΏΠ°Ρ€ΠΈΡ‚Π΅Ρ‚Π° сборки ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (#316)**: Π’ `scripts/build-client.mjs` Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ `--check`, встроСнный Π² `npm test` для прСдотвращСния рассинхронизации `lib/client.js` с Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ `src/client/*`. * **ДСкомпозиция Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ (#317)**: `lib/index.js` сокращён Π΄ΠΎ Ρ‚ΠΎΠ½ΠΊΠΎΠ³ΠΎ фасада (<400 строк); схСма ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ вынСсСна Π² `lib/config-schema.js`, Π° Ρ€Π΅Π·ΠΎΠ»Π²Π΅Ρ€ источников β€” Π² `lib/resolve-source.js`. * **ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (#318, #319)**: УстранСно Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€Π°Π² истории ΠΏΡ€ΠΈ стартС ΠΏΠ»Π°Π³ΠΈΠ½Π°; ΡƒΠ΄Π°Π»Ρ‘Π½ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ fallback `loc.get` Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΡˆΡ‚Π°Ρ‚Π½ΠΎΠ³ΠΎ API Cordis. ## πŸš€ ОбновлСния v0.10.26: АрхитСктурная дСкомпозиция ΠΈ чистота рСпозитория (#235, #238, #239) * **АрхитСктурная дСкомпозиция ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (#239)**: ВсС сСрвСрныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² `lib/` ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π½ΠΎΠΌΡƒ стандарту <= 600 строк: гСнСрация ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² вынСсСна Π² `lib/tools/generation-pack.js` (74 строки, `generation.js` сниТСн Π΄ΠΎ 547 строк), кэш ΠΈ история β€” Π² `lib/history.js` (93 строки), влоТСния ΠΈ сайдкары β€” Π² `lib/attachment-helper.js` (82 строки, `index.js` сниТСн Π΄ΠΎ 557 строк). ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π·Π±ΠΈΡ‚ Π½Π° 15 ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² `src/client/*` (ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ <= 337 строк). * **Чистота рСпозитория (#235)**: Π‘Π»ΡƒΠΆΠ΅Π±Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π°Π³Π΅Π½Ρ‚ΠΎΠ² (`AGENTS.md`, `index.md`) сняты с git-отслСТивания ΠΈ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ Π² `.gitignore` ΠΈ `.gitattributes`. * **ΠŸΠ°Ρ€ΠΈΡ‚Π΅Ρ‚ Ρ‚Π΅ΠΌ оформлСния (#238)**: Полная вСрификация ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ Ρ…Π°Ρ€Π΄ΠΊΠΎΠ΄Π° Ρ†Π²Π΅Ρ‚ΠΎΠ² для всСх повСрхностСй UI Ρ‡Π΅Ρ€Π΅Π· систСмныС Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ `--dsw-alias-*` ΠΈ `color-mix(...)`. * **Π¦Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Π°**: ΠœΠ°Π½ΠΈΡ„Π΅ΡΡ‚ `files` Π² `package.json` Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ языковыми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ `README.ru.md` ΠΈ `README.zh.md`. ## πŸš€ ОбновлСния v0.10.25: Чистота Ρ‚Π΅ΠΌΡ‹ DSH, Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΌΠΎΠΊΠ°ΠΏΡ‹, Π±Π΅ΡΡˆΠΎΠ²Π½Ρ‹Π΅ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ ΠΈ ΡΠΏΡ€Π°ΠΉΡ‚ΡˆΠΈΡ‚Ρ‹ (#173, #177, #178, #238) * **100% адаптация ΠΏΠΎΠ΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π΅ΠΌΡ‹ DSH (#238)**: ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ устранСны всС Π·Π°Ρ…Π°Ρ€Π΄ΠΊΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ `rgba(...)` ΠΈ hex-Ρ†Π²Π΅Ρ‚ΠΎΠ² Π² клиСнтской части (`src/client/10-css.js`, `src/client/80-gallery.js`). ΠŸΠΎΠ»ΡƒΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹Π΅ статусныС Ρ„ΠΎΠ½Ρ‹ Π±Π΅ΠΉΠ΄ΠΆΠ΅ΠΉ, Π°Π»Π΅Ρ€Ρ‚ΠΎΠ² ΠΈ ΠΌΠΎΠ΄Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ²Π΅Ρ€Π»Π΅Π΅Π² ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Ρ‹ Π½Π° динамичСскоС смСшиваниС Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Ρ‚Π΅ΠΌΡ‹ Ρ‡Π΅Ρ€Π΅Π· `color-mix(...)`. * **Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½Ρ‹Ρ… интСрфСйсных ΠΌΠΎΠΊΠ°ΠΏΠΎΠ² (`generate_responsive_mockups`, #173)**: ГСнСрация согласованного Π½Π°Π±ΠΎΡ€Π° экранов Mobile (9:16), Tablet (3:4) ΠΈ Desktop (16:9) ΠΏΠΎ Π΅Π΄ΠΈΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠΌΠΏΡ‚Ρƒ с ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ‡Π΅Ρ€Π΅Π· `asyncPool` (concurrency 3) ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ Ρ‚Π°Π±-интСрфСйсом Π² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅ Ρ‡Π°Ρ‚Π°. * **Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π±Π΅ΡΡˆΠΎΠ²Π½Ρ‹Ρ… тСкстур ΠΈ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² (`generate_seamless_pattern`, #178)**: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ тайлящихся Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… тСкстур со встроСнным ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ швов ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ CSS-прСдпросмотром. * **Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ 2D-ΡΠΏΡ€Π°ΠΉΡ‚ΡˆΠΈΡ‚ΠΎΠ² (`generate_spritesheet`, #177)**: Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… раскадровок Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ пСрсонаТСй ΠΈ UI с Π°Π²Ρ‚ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ CSS `@keyframes` ΠΈ SVG-ΠΏΡ€Π΅Π²ΡŒΡŽ полосы ΠΊΠ°Π΄Ρ€ΠΎΠ². * **ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½Π°Ρ сборка ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (#244)**: ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ разнСсСна Π½Π° 15 структурированных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² `src/client/*` со скриптом сборки `scripts/build-client.mjs`. Preflight-ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° `FAIL=0`, 179 ΠΈΠ· 179 тСстов ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½Ρ‹. ## πŸš€ ОбновлСния v0.10.24: Π‘Π»ΠΎΠΊ качСства β€” публикационная Π³Ρ€Π°Π½ΠΈΡ†Π°, статусы настроСк, Ρ†Π²Π΅Ρ‚Π° Ρ‚Π΅ΠΌΡ‹ ΠΈ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (#235–#242) * **ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Π°Ρ Π³Ρ€Π°Π½ΠΈΡ†Π°**: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ `.gitattributes` c `export-ignore` для `AGENTS.md`, `index.md`, `docs/` ΠΈ `.gitea/` β€” Π°Ρ€Ρ…ΠΈΠ²Ρ‹ GitHub source ΠΈ `git archive` большС Π½Π΅ содСрТат Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ workflow. * **Бтатусы настроСк**: исправлСн fallback статуса ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°/ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅ настроСк β€” ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Π΅/нСизвСстныС состояния большС Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π»ΠΎΠΆΠ½Ρ‹ΠΌ Β«unavailableΒ». * **Π’Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ с Π΄ΠΈΠ·Π°ΠΉΠ½-систСмой**: остаточныС CSS-классы `fal-` ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Ρ‹ Π² прСфикс `ig-`; Ρ†Π²Π΅Ρ‚Π° привязаны ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Ρ‚Π΅ΠΌΡ‹ DSH Ρ‡Π΅Ρ€Π΅Π· `var(--dsw-alias-*, )`. * **Π—Π°Ρ‰ΠΈΡ‚Π° Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²**: запись history, cache meta/data ΠΈ spend-meter послС записи ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΡ€Π°Π²Π° `0600`. * **Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΌΡ‘Ρ€Ρ‚Π²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ**: ΡƒΠ΄Π°Π»Ρ‘Π½ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ `listCuratedStyles`; ΡƒΠΊΡ€ΡƒΠΏΠ½Ρ‘Π½Π½Ρ‹Π΅ server-ΠΌΠΎΠ΄ΡƒΠ»ΠΈ разнСсСны β€” ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ `providers.js` β†’ `provider-utils.js`, `processing.js` β†’ `processing-basic.js` + `processing-advanced.js`. Π Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ client ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½ΠΎ Π² #244. ## πŸš€ ОбновлСния v0.10.23: ВстроСнноС Π°Π²Ρ‚ΠΎΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, синхронизация настроСк, диагностичСскиС ΠΏΡ€ΠΎΠ±Ρ‹ ΠΈ чистота языка (#232) * **ВстроСнноС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π² 1 ΠΊΠ»ΠΈΠΊ**: ΠŸΡ€ΡΠΌΠ°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π° прямо ΠΈΠ· ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ настроСк (`UpdaterSection`) Ρ‡Π΅Ρ€Π΅Π· эндпоинт `/api/dsh-image-gen/update`. ΠžΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ рССстр npm, сравниваСт semver-вСрсии ΠΈ бСзопасно запускаСт установку Ρ‡Π΅Ρ€Π΅Π· `dsh plugin add` с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΏΠΎ loopback ΠΈ Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠΉ локальной сСти (RFC 1918). * **Бинхронизация настроСк 1:1**: ПолноС Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ схСмы хоста `Config` Π² `lib/index.js` ΠΈ ΠΏΠΎΠ»Π΅ΠΉ UI `FIELDS` Π² `lib/client.js` β€” Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ «✨ ΠŸΡ€ΠΎΠΌΠΏΡ‚ ΠΈ стили» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ‚ΡƒΠΌΠ±Π»Π΅Ρ€Ρ‹ `autoEnhancePrompt` ΠΈ Π²Ρ‹ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΉ список `defaultStylePreset`. * **АктивныС диагностичСскиС ΠΏΡ€ΠΎΠ±Ρ‹**: Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ сСтСвыС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π² `testProviderConnection` для Replicate (`/v1/models`), Google Gemini (`/v1beta/models`) ΠΈ ByteDance Seedream с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΏΠΎ Ρ‚Π°ΠΉΠΌ-Π°ΡƒΡ‚Ρƒ ΠΈ Π·Π°ΠΌΠ΅Ρ€ΠΎΠΌ сСтСвой Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ. * **Π‘Ρ‚Ρ€ΠΎΠ³ΠΎΠ΅ соотвСтствиС стандарту ΠΌΡƒΠ»ΡŒΡ‚ΠΈΡΠ·Ρ‹Ρ‡Π½ΠΎΡΡ‚ΠΈ**: ЧистыС стандартныС словари `en` ΠΈ `zh` Π² ядрС ΠΏΠ»Π°Π³ΠΈΠ½Π°; русскиС ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎ вынСсСны Π² `goodandready/dsh-russian-lang` Π² соотвСтствии с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ DSH. Π ΠΎΠ²Π½ΠΎ 0 символов ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹ Π² исходном ΠΊΠΎΠ΄Π΅ (`lib/`). * **Π”ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ интСрфСйса (WAI-ARIA A11y)**: Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ° Π²ΠΊΠ»Π°Π΄ΠΎΠΊ ΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Ρ„ΠΎΡ€ΠΌ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ `role="tablist"`, `role="tab"`, `aria-selected`, `aria-controls`, `role="tabpanel"`, `aria-describedby` ΠΈ `role="alert"`. ## πŸš€ ОбновлСния v0.10.22: Бтабилизация состояния ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ настроСк ΠΈ устранСниС React Error #185 (#230) * **Π Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ настроСк**: УстранСна критичСская ошибка React #185 (`Maximum update depth exceeded`) Π² `FalSettingsCardController` ΠΈ `CardForm.prototype.bind`. Π‘Π½ΠΈΠΌΠΊΠΈ состояния ΠΊΡΡˆΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ ссылкС (`Object.is(prev, next) === true`) Π²ΠΎ врСмя Ρ†ΠΈΠΊΠ»ΠΎΠ² Ρ€Π΅Π½Π΄Π΅Ρ€Π°, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ прСдотвращая бСсконСчныС Ρ†ΠΈΠΊΠ»Ρ‹ пСрСрисовки Π² React 18 / `useSyncExternalStore`. * **Глубокая интСграция со стором DSH**: Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° бСсшовная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ `@deepseek-ai/dsh-client-store` (`runtime.createSnapshotStore`) с Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΌ отказоустойчивым ΠΊΡΡˆΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌ fallback-Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ. * **АвтоматичСскиС рСгрСссионныС тСсты**: Π”ΠΎΠ±Π°Π²Π»Π΅Π½ спСциализированный тСст ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ссылок Π² `test/client-syntax.test.mjs`, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ снимков ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чтСниях, Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΡΡ‚ΡŒ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ отписку. ## πŸš€ ОбновлСния v0.10.21: ВСрстак Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ, ΡƒΠΌΠ½Ρ‹ΠΉ ΠΊΡ€ΠΎΠΏΠΏΠ΅Ρ€ ΠΈ экспорт Π±Ρ€Π΅Π½Π΄-ассСтов (#228) * **Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ вСрстак Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ ΠΈ рСмиксов (Remix Workbench)**: ВстроСнная панСль Π² `FalImageCard` ΠΈ Π³Π°Π»Π΅Ρ€Π΅Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΉ. Настройка силы Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠΎΠΌ крСативности (0.05–0.95), быстрыС прСсСты (Β«Π’ΠΎΠ½ΠΊΠΈΠ΅ ΠΏΡ€Π°Π²ΠΊΠΈ 0.25Β», Β«ΠšΡ€Π΅Π°Ρ‚ΠΈΠ² 0.65Β») ΠΈ тСкстовоС Π΄ΠΎ-Ρ€ΡƒΠ»ΠΈΠ²Π°Π½ΠΈΠ΅ стилСм. * **Π£ΠΌΠ½ΠΎΠ΅ ΠΊΠ°Π΄Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ стандарты ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΉ (`smart_crop_image`)**: ΠœΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ пСрСсчСт ΠΈ ΠΊΠ°Π΄Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ соцсСти ΠΈ Π±Π°Π½Π½Π΅Ρ€Ρ‹ (`1:1`, `16:9`, `9:16`, `4:3`, `3:2`, `2:3`) с Ρ€Π΅ΠΆΠΈΠΌΠ°ΠΌΠΈ цСнтрирования, Ρ‚Ρ€Π΅Ρ‚Π΅ΠΉ (`rule_of_thirds`), ΡƒΠΌΠ½ΠΎΠ³ΠΎ фокуса ΠΈ Ρ€Π°ΠΌΠΊΠΈ (`letterbox`) Π½Π° чистом SVG Π±Π΅Π· Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΎΠ². * **Экспорт ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π²Π΅Π±-ассСтов (`export_asset_pack`)**: АвтоматичСская сборка Ρ„Π°Π²ΠΈΠΊΠΎΠ½ΠΎΠΊ (`favicon.svg`), PWA-ΠΈΠΊΠΎΠ½ΠΎΠΊ (`icon-192.svg`, `icon-512.svg`), `manifest.webmanifest`, ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ соцсСтСй OpenGraph (`og-card.svg` 1200Γ—630) ΠΈ `catalog.json`. * **НативныС ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ-Ρ‚ΡƒΠ»Π²ΡŒΡŽ для 12 Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… инструмСнтов**: БыстрыС дСйствия рСмикса, апскСйла, ΠΊΡ€ΠΎΠΏΠ° ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ прямо ΠΈΠ· Ρ‡Π°Ρ‚Π° DSH. * **Бтрогая интСрнационализация**: ΠŸΠΎΠ»Π½Ρ‹Π΅ словари `zh` ΠΈ `en`; рСгистрация строк русского ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· `goodandready/dsh-russian-lang`. ## πŸš€ ОбновлСния v0.10.19: ВстроСнная галСрСя Π² сайдбарС, диагностика ΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ стилСй (#224) * **Нативная галСрСя Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΉ Π² сайдбарС**: ΠŸΡ€ΡΠΌΠ°Ρ интСграция Π² ΠΏΡ€Π°Π²Ρ‹ΠΉ сайдбар DSH (`sidebarRightTabs`, слот `sidebar.right.pane.tab`, сСрвис `betterSidebar`) ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ° быстрого открытия Π² шапкС Π΄ΠΈΠ°Π»ΠΎΠ³Π° (`conversation.session.header.utilities`). ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ истории Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΉ, инспСктор ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΌΠΏΡ‚ΠΎΠ² ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ. * **Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π°Ρ диагностика ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ²**: Кнопка Β«ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ связь» Π² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ΅ настроСк ΠΏΠ»Π°Π³ΠΈΠ½Π° Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Β«ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹Β». Π˜Π·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ сСти ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° доступности Fal.ai, ComfyUI, Automatic1111 ΠΈ Custom API со статусными Π±Π΅ΠΉΠ΄ΠΆΠ°ΠΌΠΈ. * **Π”Π²ΠΈΠΆΠΎΠΊ стилСй ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ°ΠΉΠ·Π΅Ρ€ ΠΏΡ€ΠΎΠΌΠΏΡ‚ΠΎΠ²**: ВстроСнный ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΈΠ· 10 стилСй (`cinematic`, `photorealistic`, `anime`, `minimalist_vector`, `isometric_3d`, `analog_film`, `cyberpunk`, `pixel_art`, `oil_painting`, `claymation`), настройка `autoEnhancePrompt` ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ `style_preset` Π² `generate_image`. * **Π‘Π±ΠΎΡ€ΠΊΠ° ΠΊΠΎΠ»Π»Π°ΠΆΠ΅ΠΉ ΠΈ сСток сравнСния (`assemble_image_grid`)**: ОбъСдинСниС 2–4 ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ»Π»Π°ΠΆ (side-by-side, 2x2, vertical) Π½Π° чистом SVG Π±Π΅Π· Π²Π½Π΅ΡˆΠ½ΠΈΡ… тяТСлых Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ (Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ°ΠΊΠ΅Ρ‚Π° строго < 250 ΠšΠ‘). * **ГСнСрация ΠΏΠΎΠ΄ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ Π±Ρ€Π΅Π½Π΄Π°**: ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `palette_colors` (массив hex-Ρ†Π²Π΅Ρ‚ΠΎΠ²) Π² `generate_image` для Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ выдСрТивания Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Π³Π°ΠΌΠΌΡ‹ Π² ΠΏΡ€ΠΎΠΌΠΏΡ‚Π΅ с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ контраста WCAG. * **Inpainting ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ маскС Π² `edit_image`**: ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° `mask_image` ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° `strength` (0.0–1.0) для Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Ρ„ΠΎΠ½Π°. * **Полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° английской ΠΈ китайской Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ**: Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ `zh` ΠΈ `en` Π² Web UI; рСгистрация строк для русского интСрфСйса Ρ‡Π΅Ρ€Π΅Π· `goodandready/dsh-russian-lang`. ## πŸš€ ОбновлСния v0.10.18: УскорСниС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ (#222) * **ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ гСнСрация Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ ΠΈ ΠΏΠ°ΠΊΠΎΠ²**: Запросы с `count > 1`, ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠΌΠΏΡ‚Ρ‹ `prompts` ΠΈ инструмСнт `generate_image_pack` Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с ΠΏΡƒΠ»ΠΎΠΌ Π·Π°Π΄Π°Ρ‡ (`concurrency: 3`), сокращая врСмя оТидания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π΄ΠΎ **3 Ρ€Π°Π·**. * **ΠœΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ опрос ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ (Zero-Delay Initial Poll)**: УстранСна искусствСнная Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ запросом статуса Π² `pollStatus` (Fal.ai, ComfyUI), экономя 1–1.5 с Π½Π° быстрых гСнСрациях. * **БубмиллисСкундный L1-кэш Π² памяти**: 32-ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ LRU-кэш ΠΏΠΎΠ²Π΅Ρ€Ρ… дискового L2 обСспСчиваСт ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΡƒΡŽ ΠΎΡ‚Π΄Π°Ρ‡Ρƒ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΉ (< 0.1 мс) Π±Π΅Π· синхронного чтСния с диска. * **Fast-Fail ΠΏΡ€ΠΈ исчСрпании ΠΊΠ²ΠΎΡ‚Ρ‹**: Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ распознаваниС HTTP 402 (Payment Required) ΠΈ ошибок баланса/ΠΊΡ€Π΅Π΄ΠΈΡ‚ΠΎΠ² Π² `isFatalClientError` для чистого ΠΈ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π° запасного ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°. * **Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ тСстов**: Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Π½Π°Π±ΠΎΡ€ `test/batch5-speed-quality.test.mjs`, ΠΎΠ±Ρ‰Π΅Π΅ ΠΏΠΎΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ выросло Π΄ΠΎ **136 ΡŽΠ½ΠΈΡ‚-тСстов (100% pass)**. ## πŸš€ ОбновлСния v0.10.17: ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΉ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Ρ‚ΡƒΠ»ΠΎΠ² (#216, #217) * **Π’ΡƒΠ»Ρ‹ вынСсСны ΠΈΠ· `apply()`**: host `lib/index.js` β€” тонкая cordis-Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π°. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ‚ΡƒΠ»ΠΎΠ² β€” Π² `lib/tools/*` Ρ‡Π΅Ρ€Π΅Π· `lib/register-tools.js`. * **Π‘Π²ΠΎΠΉ labeled `ctx.effect` Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ tool** (`dsh-image-gen: tool `) для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ. * **Meta-Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°**: `AGENTS.md` ΠΈ `index.md` (Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² npm-ΠΏΠ°ΠΊΠ΅Ρ‚). * **DESIGN.md** большС Π½Π΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΡƒΡŽ HistoryGallery (#203). * **ВСсты**: `lifecycle-structure` + ΠΏΠΎΠ»Π½Ρ‹ΠΉ suite β€” **132 unit tests**. ## ⚑ ΠžΠ±Π·ΠΎΡ€ возмоТностСй **`@goodandready/dsh-image-gen`** β€” флагманский графичСский ΠΏΠ»Π°Π³ΠΈΠ½ для экосистСмы DeepSeek Harness, ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π°Π³Π΅Π½Ρ‚Π° Π² ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΡƒΡŽ Ρ‚Π²ΠΎΡ€Ρ‡Π΅ΡΠΊΡƒΡŽ ΡΡ‚ΡƒΠ΄ΠΈΡŽ. Плагин прСдоставляСт Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ инструмСнтов для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ, трансформации, апскСйла, Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ 8 ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π² Ρ‡Π°Ρ‚Π΅. ```mermaid graph LR subgraph Input [πŸ€– АгСнт ΠΈ ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ] Agent[ΠŸΡ€ΠΎΠΌΠΏΡ‚ / Π—Π°Π΄Π°Ρ‡Π° Π°Π³Π΅Π½Ρ‚Π°] UserUI[Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ / Π§Π°Ρ‚] end subgraph Tools [πŸ› οΈ ΠŸΠ°ΠΊΠ΅Ρ‚ инструмСнтов] T1[generate_image] T2[remove_background] T3[upscale_image] T4[vectorize_image] T5[blend_images] T6[generate_image_pack] T7[compare_images] T8[inspect_image_quality] T9[edit_image] T10[vary_image] end subgraph Core [πŸ›‘οΈ Π―Π΄Ρ€ΠΎ надСТности ΠΈ кэша] Cache[Π”Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ sha256 Hash Cache] Backoff[Exponential Backoff + Jitter] Classifier[ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ„Π°Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ошибок 400] Snap64[VAE 64-Multiple Dimension Snapping] end subgraph Engine [βš™οΈ ДиспСтчСр бэкСндов] P_FAL[FAL.ai Queue] P_REP[Replicate API] P_CUST[OpenAI / SiliconFlow] P_COD[ChatGPT Plus/Pro OAuth] P_GROK[Grok Imagine OAuth] P_LOC[ComfyUI / A1111] P_SEA[ByteDance SeaDream] P_GEM[Google Imagen 3] end subgraph Store [πŸ’Ύ Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ UI] Sidecar[.json Sidecar + Parameters tEXt] A1111[Drag-and-Drop Π² ComfyUI / WebUI] Card[πŸ–ΌοΈ ΠšΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° Π² Ρ‡Π°Ρ‚Π΅ с Re-roll, ΠŸΡ€Π°Π²ΠΊΠΎΠΉ, NoBG] end Input --> Tools Tools --> Core Core --> Engine Engine --> Store style Input fill:#1e1e2e,stroke:#89b4fa,stroke-width:2px,color:#cdd6f4 style Tools fill:#181825,stroke:#cba6f7,stroke-width:2px,color:#cdd6f4 style Core fill:#11111b,stroke:#fab387,stroke-width:2px,color:#cdd6f4 style Engine fill:#11111b,stroke:#a6e3a1,stroke-width:2px,color:#cdd6f4 style Store fill:#1e1e2e,stroke:#f38ba8,stroke-width:2px,color:#cdd6f4 ``` --- ## πŸ› οΈ ΠŸΠΎΠ»Π½Ρ‹ΠΉ рССстр инструмСнтов * **`save_image_to_workspace` (#510)**: Π”Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ экспорт сгСнСрированных ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° диск Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области (`image-.`) с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ ΠΏΡƒΡ‚Π΅ΠΉ (lexical + realpath) ΠΈ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. * **`compose_baoyu_prompt` (#505)**: 5-осСвой ассСмблСр стиля ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠΌΠΏΡ‚ΠΎΠ² (Baoyu framework). Π‘ΠΈΠ½Ρ‚Π΅Π·ΠΈΡ€ΡƒΠ΅Ρ‚ спСцификации Π΄ΠΈΠ·Π°ΠΉΠ½Π° ΠΏΠΎ 5 нСзависимым осям: Ρ‚ΠΈΠΏ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, ΠΏΠ°Π»ΠΈΡ‚Ρ€Π°, срСда Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°, тСкст ΠΈ настроСниС с ограничСниями Ρ†Π²Π΅Ρ‚Π° ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ таксономии. * **`canvas_state` (#506)**: Π˜Π½ΡΠΏΠ΅ΠΊΡ†ΠΈΡ состояния бСсконСчного холста Π²ΠΎΡ€ΠΊΠ±Π΅Π½Ρ‡Π°: Ρ„ΠΈΠ³ΡƒΡ€Ρ‹, сгСнСрированныС изобраТСния с происхоТдСниСм (модСль/ΠΏΡ€ΠΎΠΌΠΏΡ‚), рисунки ΠΎΡ‚ Ρ€ΡƒΠΊΠΈ, Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅. * **`view_canvas` (#507)**: ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ области холста Π² Π²ΠΈΠ΄Π΅ влоТСния-ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π° Π² Π΄ΠΈΠ°Π»ΠΎΠ³ для ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΌΠΎΠ΄Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ sketch-to-image Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ. * **`compare_models_matrix` (#503)**: ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π°Ρ‚Π» (Shootout). ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ гСнСрация ΠΏΡ€ΠΎΠΌΠΏΡ‚Π° Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… модСлях (Google Imagen 3, FAL FLUX Dev, Replicate FLUX Schnell, Seedream 3, DALL-E 3) с Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Π°ΠΌΠΈ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΉ, Π·Π°ΠΌΠ΅Ρ€ΠΎΠΌ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ стоимости, ΠΈ сборкой ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Ρ‡Π΅Ρ€Π΅Π· Sharp. * **`search_inspiration_prompts` (#504)**: ВстроСнный ΠΎΡ„Ρ„Π»Π°ΠΉΠ½-ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ 970+ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠΌΠΏΡ‚ΠΎΠ² ΠΈΠ· `awesome-gpt-image-2` ΠΈ `handraw-style`. Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΏΠΎ стилям, катСгориям, сцСнам ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словам с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ расходом Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² ΠΈ сСти. * **`generate_seamless_texture` (#468)**: ГСнСрация Π±Π΅ΡΡˆΠΎΠ²Π½Ρ‹Ρ… тСкстур ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠ² для 3D-ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ², ΠΈΠ³Ρ€ ΠΈ Π²Π΅Π±-Ρ„ΠΎΠ½ΠΎΠ² с Ρ‚ΠΎΡ€ΠΎΠΈΠ΄Π°Π»ΡŒΠ½Ρ‹ΠΌ сдвигом ΠΈ сСткой прСдпросмотра 3Γ—3. * **`reverse_prompt_and_recreate` (#465)**: ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΈΠ½ΠΆΠΈΠ½ΠΈΡ€ΠΈΠ½Π³ ΠΏΡ€ΠΎΠΌΠΏΡ‚Π° ΠΏΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ с дСконструкциСй освСщСния, ΠΎΠΏΡ‚ΠΈΠΊΠΈ, ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ ΠΈ стиля, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ. * **`restore_face_and_details` (#467)**: ВочСчная рСставрация Ρ‡Π΅Ρ€Ρ‚ Π»ΠΈΡ†Π°, Π³Π»Π°Π· ΠΈ ΠΌΠ΅Π»ΠΊΠΈΡ… Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ с автоматичСским Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π·ΠΎΠ½ ΠΈ ΠΏΠ»Π°Π²Π½Ρ‹ΠΌ Π±Π΅ΡΡˆΠΎΠ²Π½Ρ‹ΠΌ Π°Π»ΡŒΡ„Π°-Π±Π»Π΅Π½Π΄ΠΈΠ½Π³ΠΎΠΌ. * **`generate_with_control` (#463)**: ГСнСрация с гСомСтричСским ΠΈ структурным ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ Ρ‡Π΅Ρ€Π΅Π· ControlNet (`mode: "canny" | "depth" | "pose" | "sketch"`) с ΠΏΡ€Π΅Π΄ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ² ΠΈ ΠΊΠ°Ρ€Ρ‚ Π³Π»ΡƒΠ±ΠΈΠ½ Π½Π° Sharp. * **`generate_turnaround_sheet` (#464)**: Π‘ΠΈΠ½Ρ‚Π΅Π· ΠΏΠ°Π½ΠΎΡ€Π°ΠΌΠ½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»ΡŒΠ½Ρ‹Ρ… листов пСрсонаТСй ΠΈ 3D-ассСтов с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ракурсов (`front`, `side`, `back`, `three_quarter`) с автоматичСской Π½Π°Ρ€Π΅Π·ΠΊΠΎΠΉ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ†ΠΈΠΈ ΠΈ JSON-манифСстом. | Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ | НазначСниС | ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ | |---|---|---| | **`outpaint_image`** | Π˜Π½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ холста Π² Π»ΡŽΠ±Ρ‹Ρ… направлСниях (`top`/`bottom`/`left`/`right`) с Π±Π΅ΡΡˆΠΎΠ²Π½Ρ‹ΠΌ синтСзом продолТСния сцСны ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ масок (#459) | `image`, `prompt`, `directions` (`top`/`bottom`/`left`/`right`), `feather`, `provider`, `seed` | | **`async_generate_image`** | Асинхронный ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠΉ Π²Ρ‹Π΄Π°Ρ‡Π΅ΠΉ `task_id`, отслСТиваниСм прогрСсса ΠΈ ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ бэкоффом (#460) | `prompt`, `task_id`, `wait` (`true`/`false`), `timeout_seconds`, `image_size`, `provider` | | **`translate_image_text`** | ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Π°Ρ локализация тСкста Π½Π° изобраТСниях (RU, EN, ZH) с OCR, inpaint-очисткой Ρ„ΠΎΠ½Π° ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ΠΎΠΌ Ρ‚ΠΈΠΏΠΎΠ³Ρ€Π°Ρ„ΠΈΠΊΠΈ (#454) | `image`, `target_lang`, `source_lang`, `regions`, `font_color`, `font_family`, `inpaint_prompt` | | **`render_wireframe_asset`** | Π‘ΠΈΠ½Ρ‚Π΅Π· чистовых Π΄ΠΈΠ·Π°ΠΉΠ½-ассСтов ΠΈΠ· каркасов ΠΈ UI-ΠΌΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с прСсСтами Π΄ΠΈΠ·Π°ΠΉΠ½-систСм ΠΈ ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ fidelity (#455) | `wireframe_image`, `design_system` (`modern_saas`/`dark_glassmorphism`/`brutalist`/`apple_minimal`), `fidelity`, `style`, `prompt` | | **`generate_drawio_diagram`** | ГСнСрация Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… XML-схСм Draw.io / diagrams.net (`.drawio`) с чистым Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΌ SVG-ΠΏΡ€Π΅Π²ΡŒΡŽ (#451) | `title`, `nodes`, `edges`, `layout` (`horizontal`/`vertical`/`grid`/`tree`), `theme` (`light`/`dark`/`blueprint`/`corporate`/`nord`), `output_format` | | **`generate_image`** | ГСнСрация изобраТСния ΠΏΠΎ тСксту | `prompt`, `image_size`, `seed`, `style_preset`, `negative_prompt`, `guidance_scale`, `steps`, `sampler_name`, `count` | | **`set_style_anchor`** | Ѐиксация Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ стиля ΠΈ пСрсонаТа сСссии (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡΡ‚ΡŽΠΌ, ΠΏΠ°Π»ΠΈΡ‚Ρ€Π°, свСт) (#283) | `mode` (`character`/`style`), `image`, `description`, `strength`, `clear` | | **`generate_ui_asset`** | ГСнСрация интСрфСйсных ассСтов с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ΠΌ свободного пространства ΠΈ Π°Π²Ρ‚ΠΎ-ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒΡŽ (#284) | `prompt`, `asset_type`, `layout_composition`, `transparent`, `output_format` | | **`generate_style_matrix`** | Π‘Π΅Ρ‚ΠΊΠ° 2x2 для ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³Π° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚Π° Π² 4 стилях со слСпым сравнСниСм (#286) | `prompt`, `styles`, `blind_mode`, `output_format` | | **`edit_image`** | НаправлСнноС Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ / inpainting с Π°Π²Ρ‚ΠΎ-поиском ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π° (#142, #144, #145) | `prompt`, `image` (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡. `latest`), `mask`, `strength` | | **`vary_image`** | ГСнСрация Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ (#143, #144) | `image` (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡. `latest`), `prompt`, `variation_strength` (0.1–0.9), `count` | | **`remove_background`** | Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Ρ„ΠΎΠ½Π° с сохранСниСм ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΠ³ΠΎ PNG | `image`, `model`, `output_name` | | **`upscale_image`** | Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π² 2x / 4x с Π΄Π΅Ρ‚Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ | `image`, `scale` (2/4), `prompt`, `creativity` | | **`vectorize_image`** | ВСкторизация растра Π² чистый SVG с ΠΊΠ²Π°Π½Ρ‚ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρ‹ | `image`, `color_mode`, `paletteSize` | | **`blend_images`** | БмСшиваниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Π΅Π΄ΠΈΠ½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ | `images`, `weights`, `prompt` | | **`generate_image_pack`** | ΠŸΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² 1:1, 16:9, 9:16 с сохранСниСм частичных Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² | `prompt`, `aspect_ratios` | | **`generate_responsive_mockups`** | ΠŸΠ°ΠΊΠ΅Ρ‚Π½Π°Ρ адаптивная гСнСрация UI-mockup ΠΏΠΎΠ΄ Mobile 9:16, Tablet 3:4 ΠΈ Desktop 16:9 с Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€ΠΎΠΉ/стилСм; Ρ‚Π°Π±Ρ‹ Π² toolview (#173) | `prompt`, `devices`, `style_preset`, `palette_colors`, `seed` | | **`compare_images`** | Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ (доля Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ пиксСлСй) | `image_a`, `image_b` | | **`inspect_image_quality`** | Аудит качСства, расчСт рСзкости ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΎΠ² | `image`, `expected_elements` | --- ## πŸ›‘οΈ ΠžΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ качСство (v0.10.0) * **Π­ΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Backoff с Jitter**: опрос ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ (FAL, Replicate, ComfyUI) автоматичСски Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ, ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ ошибки `429 Too Many Requests`. * **ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ошибок Π² Fallback Cascade**: клиСнтскиС ошибки (Content Policy, 400 Bad Request, NSFW) ΠΎΡ‚ΡΠ΅ΠΊΠ°ΡŽΡ‚ΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, прСдотвращая ΠΏΡƒΡΡ‚ΡƒΡŽ Ρ‚Ρ€Π°Ρ‚Ρƒ Π΄Π΅Π½Π΅Π³ Π½Π° Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°Ρ…. * **Π”Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ…ΡΡˆ-кэш**: ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€ΠΎΠΌΠΏΡ‚ΠΎΠΌ, модСлью ΠΈ сидом ΠΎΡ‚Π΄Π°ΡŽΡ‚ΡΡ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΈΠ· локального кэша с Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ API. * **Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с ComfyUI / Automatic1111**: ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Π²ΡˆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² PNG `tEXt` Ρ‡Π°Π½ΠΊΠΈ Π² стандартном Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ `Parameters: Prompt\nNegative prompt: ...\nSteps: ... Seed: ...`, обСспСчивая Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Drag-and-Drop. * **ΠšΡ€Π°Ρ‚Π½ΠΎΡΡ‚ΡŒ 64**: всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΈ Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ автоматичСски ΠΎΠΊΡ€ΡƒΠ³Π»ΡΡŽΡ‚ΡΡ Π΄ΠΎ ΠΊΡ€Π°Ρ‚Π½Ρ‹Ρ… 64 для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ искаТСний VAE. * **ΠžΠ±ΠΎΠ³Π°Ρ‰Π΅Π½Π½Ρ‹Π΅ прСсСты стилСй**: ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ Π² `STYLE_PRESETS` содСрТит ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ `negative_prompt` ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ `guidance_scale`. --- ## πŸš€ ОбновлСния v0.10.8: унификация Lossless JSON, Dual-Output ΠΈ строгая валидация (#199) - **Унификация Lossless JSON ΠΈ Dual-Output**: Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ `upscale_image`, `remove_background`, `blend_images`, `vectorize_image` Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΉ `toLosslessJson` ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ структурированный `summary` с ΠΏΡ€Π΅Π²ΡŒΡŽ для тСкстовых LLM. - **Бтрогая валидация Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ**: Π’ инструмСнтах `extract_design_tokens`, `image_to_css_gradient` ΠΈ `check_image_contrast` Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° явная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° сущСствования Ρ„Π°ΠΉΠ»Π° с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ошибкой (`Image not found or unreadable: `). - **Π‘ΠΊΠ²ΠΎΠ·Π½ΠΎΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ΅ тСстированиС**: Π”ΠΎΠ±Π°Π²Π»Π΅Π½ тСст-ΡΡŒΡŽΡ‚ `test/tool-consistency.test.mjs` для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ отказоустойчивости Π΄ΠΈΠ·Π°ΠΉΠ½- ΠΈ PWA-инструмСнтов. ## πŸš€ ОбновлСния v0.10.4: ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Cordis, ΠΏΠΎΠ»Π½ΠΎΡ‚Π° настроСк ΠΈ интСрнационализация - **Π–ΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Cordis (#136)**: рСгистрация всСх 7 инструмСнтов ΠΎΠ±Ρ‘Ρ€Π½ΡƒΡ‚Π° Π² `ctx.effect` для ΡˆΡ‚Π°Ρ‚Π½ΠΎΠΉ отписки ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Π°. - **ΠŸΠΎΠ»Π½ΠΎΡ‚Π° настроСк Π² GUI (#137)**: Π² ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΡƒ настроСк Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ поля для Replicate, SeaDream, Gemini, Local ComfyUI/A1111, прСсСтов стилСй ΠΈ LLM-ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚Π΅Π»Ρ. - **ΠœΠ°Π½ΠΈΡ„Π΅ΡΡ‚ зависимостСй (#138)**: Π² `peerDependencies` Π·Π°Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ всС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ слуТбы ядра (`host-webserver`, `settings`, `llm`, `system-prompt`). - **ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² (#139)**: ΠΈΠ· `FalImageCard` ΡƒΠ΄Π°Π»Ρ‘Π½ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΌΡ‘Ρ€Ρ‚Π²Ρ‹ΠΉ стСйт. - **100% интСрнационализация (#140)**: устранСны Π·Π°Ρ…Π°Ρ€Π΄ΠΊΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ русскиС строки, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ Π½Π° русский, английский ΠΈ китайский языки. ### πŸš€ Π§Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π² v0.12.10 (#480, #481, #482, #483) * **ΠΠ°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° Π²Π΅Π±-сСрвСра (#480)**: УстранСны пустыС ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ 400 Bad Request Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π°Ρ… DSH ΠΈΠ·-Π·Π° обращСния ΠΊ Π½Π΅ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ свойству connection Ρ‡Π΅Ρ€Π΅Π· прокси Cordis. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ `safeJsonHandler` ΠΈ `getConnection` Π½Π° всСх ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π°Ρ… для Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ структурированного JSON-ΠΎΡ‚Π²Π΅Ρ‚Π°. * **УсилСниС Π·Π°Ρ‰ΠΈΡ‚Ρ‹ подтвСрТдСния Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ (#481)**: Устранён ΠΎΠ±Ρ…ΠΎΠ΄ `requireApproval` самой модСлью. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `approved` ΡƒΠ΄Π°Π»Ρ‘Π½ ΠΈΠ· схСмы инструмСнта, ΠΎΡ‡ΠΈΡ‰Π΅Π½Π° подсказка Π² ошибкС Π½Π΅ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ°, Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ ΠΎΠ±Ρ…ΠΎΠ΄ Ρ‡Π΅Ρ€Π΅Π· `approved: true` ΠΈ `force: true`. * **Бтрогая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Origin для записи ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ CSRF (#482)**: Для всСх ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ² ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ (POST, PUT, DELETE) Π²Π²Π΅Π΄Π΅Π½Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° `Origin` ΠΈΠ»ΠΈ `Referer` Π½Π° совпадСниС с `Host`, ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°Ρ ΠΎΠ±Ρ…ΠΎΠ΄ Ρ‡Π΅Ρ€Π΅Π· loopback-мосты ΠΈ прокси (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `dsh-lanmode`). * **Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ тСстов ΠΈ очистка экспортов (#483)**: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области вмСсто фиксированных ΠΏΡƒΡ‚Π΅ΠΉ для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ тСстировании, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π° тСстов Π² Ρ€Π΅Π»ΠΈΠ·Π½Ρ‹Ρ… Π°Ρ€Ρ…ΠΈΠ²Π°Ρ…, ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ экспорты. ### πŸš€ Π§Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π² v0.10.16 * **БСзопасный Fallback сСрвиса Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ (#214)**: Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° функция `saveAttachmentSafe` Π²ΠΎ всСх 8 Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… инструмСнтах (`generate_image`, Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ, `remove_background`, `upscale_image`, `blend_images` ΠΈ Π΄Ρ€.). ΠŸΡ€ΠΈ запускС Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π±Π΅Π· сСрвиса Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ сбоС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° инструмСнт Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ сохраняСт Ρ„Π°ΠΉΠ» Π½Π° диск ΠΈ ΠΎΡ‚Π΄Π°Π΅Ρ‚ ΠΏΡƒΡ‚ΠΈ Π±Π΅Π· падСния. * **Бтрогая валидация HTTP-эндпоинта ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ**: Π’ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ `/dsh-image-gen/image` усилСна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° query-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (`b`, `w`, `h`), Π·Π°Ρ‰ΠΈΡ‰Π°ΡŽΡ‰Π°Ρ ΠΎΡ‚ `NaN` ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π°Ρ ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… трассировок ΠΏΡ€ΠΈ 404/500 ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…. * **Диагностика ошибок Π½ΠΎΠ΄ ComfyUI**: Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° функция `extractComfyNodeErrors`, ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‰Π°Ρ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π½ΠΎΠ΄ ΠΈΠ· `/history/{pid}` ΠΏΡ€ΠΈ сбоС Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ вмСсто бСсконСчного оТидания Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Π°. * **Нормализация ошибок Custom/OpenAI API**: Ошибки сторонних шлюзов ΠΈ API ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· `formatErrorMessage`, прСдотвращая появлСниС `[object Object]` ΠΈΠ»ΠΈ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΡ… Π΄Π°ΠΌΠΏΠΎΠ² JSON. * **Π‘ΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡ‚ΡŒ истории ΠΈ дискового кэша**: Попадания Π² кэш ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… sidecar ΠΈ истории Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΉ. * **Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ тСстов**: Π”ΠΎΠ±Π°Π²Π»Π΅Π½ тСстовый Π½Π°Π±ΠΎΡ€ `test/batch4-hardening.test.mjs`, ΠΎΠ±Ρ‰Π΅Π΅ количСство тСстов выросло Π΄ΠΎ **128 (100% pass)**. ### πŸš€ Π§Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π² v0.10.15 * **ΠžΠ±Ρ…ΠΎΠ΄ Loop Guard ΠΏΡ€ΠΈ Π½ΡƒΠ»Π΅Π²ΠΎΠΌ Π»ΠΈΠΌΠΈΡ‚Π΅ (#212)**: Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Π° ошибка, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ `loopGuardLimit: 0` (ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π·Π°Ρ‰ΠΈΡ‚Ρ‹) срабатывал `Math.max(1, 0) = 1` ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π» Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π½Π° 2-ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ 0 Π»ΠΈΠΌΠΈΡ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ. * **УсилСниС бСзопасности Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²**: Π’ `sanitizeErrorAndLogs` Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ маскированиС Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Replicate (`r8_...`) ΠΈ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Google Gemini (`AIza...`). * **Π£ΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ дискового кэша**: Π˜Π·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… LRU ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΈΠ· кэша β€” ошибки записи ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… большС Π½Π΅ приводят ΠΊ сбросу Π²Π°Π»ΠΈΠ΄Π½Ρ‹Ρ… Π±Π°ΠΉΡ‚ΠΎΠ² кэша. * **Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²**: Π’ `resolveConversationImage` Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сущСствования Ρ„Π°ΠΉΠ»Π°, Π·Π°ΠΏΡ€Π΅Ρ‚ 0-Π±Π°ΠΉΡ‚Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ 50 ΠœΠ‘ для прСдотвращСния пСрСполнСния памяти. * **ВлоТСния ΠΈ Toolview для Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ**: Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ `vectorize_image` Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ сохраняСт SVG Π²ΠΎ влоТСния `ctx.attachments` ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ `url`, Ρ‡Ρ‚ΠΎ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ прСдпросмотра Π² Ρ‡Π°Ρ‚Π΅. * **Валидация SVG-Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ**: `optimizeSvgContent` Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ строго провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ Ρ‚Π΅Π³Π° `` ΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ Π½Π΅-SVG тСкста. * **БСзопасная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π°**: `assertBudgetAvailable` Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ ΠΎΡ‚ `NaN`, нСчисловых ΠΈ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ стоимости. * **Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ΅ тСстированиС**: Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Π½Π°Π±ΠΎΡ€ тСстов `test/batch3-quality.test.mjs`, ΠΎΠ±Ρ‰Π΅Π΅ число тСстов выросло Π΄ΠΎ **126 (100% pass)**. ### πŸš€ Π§Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π² v0.10.14 * **Π•Π΄ΠΈΠ½Ρ‹ΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½ Π² стилС dsh-clinebot (#210)**: Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ настроСк ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π² соотвСтствии со стандартами `dsh-clinebot`. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ Π΄Π°ΡˆΠ±ΠΎΡ€Π΄ быстрой статистики (`.ig-grid-4`, `.ig-stat-box`), ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€, статус Quality Gate ΠΈ Π»ΠΈΠΌΠΈΡ‚ Loop Guard, Π΄Π½Π΅Π²Π½ΠΎΠΉ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚ ΠΈ состояниС кэша. * **5 ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ настроСк (Ρ‚Π°Π±Ρ‹)**: Поля сгруппированы ΠΏΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ°ΠΌ: βš™οΈ ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅, πŸ”Œ ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€, ✨ ΠŸΡ€ΠΎΠΌΠΏΡ‚ ΠΈ стили, πŸ›‘οΈ Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚, ⚑ Кэш ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅. * **Π—Π°Ρ‰ΠΈΡ‚Π° интСрфСйса Ρ‡Π΅Ρ€Π΅Π· ErrorBoundary**: ВсС Ρ„ΠΎΡ€ΠΌΡ‹ настроСк ΠΈ Ρ‚ΡƒΠ»Π²ΡŒΡŽ ΠΎΠ±Ρ‘Ρ€Π½ΡƒΡ‚Ρ‹ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ `ErrorBoundary` с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π° (Retry), Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ошибки отрисовки ΠΎΡ‚ основного интСрфСйса DSH. * **Полная синхронизация Config ↔ Client FIELDS ↔ Π‘Π»ΠΎΠ²Π°Ρ€ΠΈ**: Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ всС 40 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. Π’ интСрфСйс Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ `qualityGate`, `dailyBudgetUsd`, `loopGuardLimit`, `diskCache`, `subscriptionQuality`, `cacheBySeed`, `cacheByPrompt`. * **РСгистрация Toolview для всСх 8 Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… инструмСнтов**: ΠšΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° `tool.call.toolview` Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ рСгистрируСтся для `generate_image`, `edit_image`, `vary_image`, `blend_images`, `generate_image_pack`, `remove_background`, `upscale_image`, `vectorize_image`. * **КомплСксная Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΈ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ API-ΠΊΠ»ΡŽΡ‡Π΅ΠΉ**: Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΎ дСйствиС `trackAndAssertLoopGuard`, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π° `assertBudgetAvailable` ΠΈ санитизации ошибок `sanitizeErrorAndLogs` Π½Π° инструмСнты `edit_image`, `vary_image`, `blend_images`, `remove_background`, `upscale_image`. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `seedreamBaseURL`. ### πŸš€ Π§Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π² v0.10.13 * **Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ настроСк (#208)**: ΠšΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠ° настроСк ΠΏΠ»Π°Π³ΠΈΠ½Π° пСрСнСсСна строго Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ «Настройки β†’ ΠŸΠ»Π°Π³ΠΈΠ½Ρ‹ β†’ Настройки ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ²Β» (слот `settings.plugin.item`). Π£Π΄Π°Π»Ρ‘Π½ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ запасной ΠΏΡƒΡ‚ΡŒ `settings.section`, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ настройки ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π»ΠΈΡΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ΠΎΠΌ Π² ΠΎΠ±Ρ‰Π΅ΠΌ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΌ мСню настроСк. * **БСзопасная отлоТСнная рСгистрация слота (`registerSlotWhenReady`)**: РСгистрация Ρ‡Π΅Ρ€Π΅Π· `ctx.slots.inject` Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΡƒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΈ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ настроСк ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ страницы Π² DSH UI Π±Π΅Π· ошибок синхронизации. ### πŸš€ Π§Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π² v0.10.12 * **Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ синтаксичСской ошибки (#208)**: УстранСно ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ объявлСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (`const hPrompt`) Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ `checkCache` Π²Π½ΡƒΡ‚Ρ€ΠΈ `lib/index.js`. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° автоматичСская ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° синтаксиса всСх ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π² Π½Π°Π±ΠΎΡ€ ΡŽΠ½ΠΈΡ‚-тСстов. ### πŸš€ Π§Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π² v0.10.11 (#165, #166, #167, #168, #169, #170) * **Negative Prompt Sanitizer (#165)**: АвтоматичСская санитизация ΠΈ дСдупликация Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠΌΠΏΡ‚ΠΎΠ² для Π΄ΠΈΡ„Ρ„ΡƒΠ·ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ (SDXL, ComfyUI, Seedream, Local) с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π° стилСй (сохраняСт Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½ΡƒΡŽ Π·Π΅Ρ€Π½ΠΈΡΡ‚ΠΎΡΡ‚ΡŒ, Π²ΠΈΠ½Ρ‚Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ»ΠΈ Ρ‚Π΅Π½ΠΈ). * **Quality Gate ΠΈ Silent Re-roll (#166)**: ЭкспрСсс-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ рСзкости/энтропии ΠΊΠ°Π΄Ρ€Π° ΠΈ интСграция с `dsh-vision-bridge` с автоматичСским Ρ‚ΠΈΡ…ΠΈΠΌ Ρ€Π΅-Ρ€ΠΎΠ»Π»ΠΎΠΌ Π΄Π΅Ρ„Π΅ΠΊΡ‚Π½Ρ‹Ρ…, пустых ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π½Ρ‹Ρ… ΠΊΠ°Π΄Ρ€ΠΎΠ² (Π΄ΠΎ 2 ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ). * **Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с dsh-cost-meter ΠΈ суточный Π±ΡŽΠ΄ΠΆΠ΅Ρ‚ (#167)**: Варифная сСтка ΠΏΠΎ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°ΠΌ ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌ, фиксация расходов Π² `~/.dsh/storages/dsh-image-gen-spend.json` ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ пСрСрасхода суточного Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π° (`dailyBudgetUsd`). * **Fail-Fast Loop Guard (#168)**: Π—Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ бСсконСчного зацикливания Π°Π³Π΅Π½Ρ‚Π° Π² Ρ€Π°ΠΌΠΊΠ°Ρ… сСссии (максимум 3 ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ подряд Π±Π΅Π· ΠΎΡ‚Π²Π΅Ρ‚Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ). * **ΠœΠ°ΡΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ (#169)**: Полная санитизация Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Π² Π»ΠΎΠ³Π°Ρ…, ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΈ URL (`Bearer sk-...abcd`) ΠΈ ΠΏΡ€Π°Π²Π° доступа `0600` Π½Π° Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. * **ΠšΠΎΠ½Ρ‚Π΅Π½Ρ‚Π½ΠΎ-адрСсуСмый дисковый кэш (#170)**: МгновСнная ΠΎΡ‚Π΄Π°Ρ‡Π° (<50мс, нулСвая ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ) ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎ SHA-256 Ρ…ΡΡˆΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² с автоочисткой ΠΏΠΎ LRU (Π»ΠΈΠΌΠΈΡ‚ 500 ΠœΠ‘) ΠΈ ΠΎΠΏΡ†ΠΈΠ΅ΠΉ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ…ΠΎΠ΄Π° `force: true`. ### πŸš€ Π§Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π² v0.10.10 (#201, #203) * **Бтабилизация ΠΎΠΊΠ½Π° настроСк GUI (#201)**: Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Π° спСцификация `booleanField` Π² клиСнтском ΠΊΠΎΠ΄Π΅, Π²Ρ‹Π·Ρ‹Π²Π°Π²ΡˆΠ°Ρ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Ρ€Π΅Π½Π΄Π΅Ρ€Π° ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ настроСк ΠΏΠ»Π°Π³ΠΈΠ½Π° Π² DSH Web UI. Π€ΠΎΡ€ΠΌΠ° настроСк Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ открываСтся ΡˆΡ‚Π°Ρ‚Π½ΠΎ со всСми полями, сСлСкторами ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ², модСлями, ссылками Π½Π° ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ прСсСтами. * **ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° интСрфСйса настроСк (#203)**: Из ΠΎΠΊΠ½Π° настроСк ΡƒΠ±Ρ€Π°Π½Π° встроСнная галСрСя истории Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΉ, Π·Π°Π³Ρ€ΠΎΠΌΠΎΠΆΠ΄Π°Π²ΡˆΠ°Ρ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΡƒ настроСк. * **Полная локализация (#201)**: Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ всС Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ строки ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ² ΠΈ подсказок Π½Π° русском ΠΈ английском языках для всСх ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ². * **НадёТная рСгистрация слотов**: Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ `registerFirst` с ΠΏΠ»Π°Π²Π½Ρ‹ΠΌ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ `settings.plugin.item` ΠΈ `settings.section`. ## 🎨 ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ * **`fal`** *(Π΄Π΅Ρ„ΠΎΠ»Ρ‚)*: БвСрхбыстрая ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ FAL.ai (`FLUX.1-schnell`, `FLUX-dev`, `SDXL`, BiRefNet, Clarity Upscaler). * **`replicate`**: МодСли сообщСства Ρ‡Π΅Ρ€Π΅Π· Replicate API. * **`custom`**: Π›ΡŽΠ±ΠΎΠΉ OpenAI-совмСстимый эндпоинт (DALL-E 3, SiliconFlow, Together AI, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ шлюз). * **`codex`**: ГСнСрация Ρ‡Π΅Ρ€Π΅Π· ChatGPT Plus/Pro подписку (`dsh-subscriptions` OAuth Π±Π΅Π· ΠΎΠΏΠ»Π°Ρ‚Ρ‹ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²). * **`grok`**: ГСнСрация Ρ‡Π΅Ρ€Π΅Π· Grok Imagine подписку (`dsh-subscriptions` OAuth). * **`local`**: Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ComfyUI (Π³Ρ€Π°Ρ„ Π½ΠΎΠ΄) ΠΈΠ»ΠΈ Automatic1111 (SD WebUI). * **`seedream`**: ByteDance Doubao / SeaDream API. * **`gemini`**: Google Imagen 3 Ρ‡Π΅Ρ€Π΅Π· GenAI API. > [!NOTE] > **Π—Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ SSRF ΠΈ валидация URL**: По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ адрСса ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² (`baseURL`, `customBaseURL`, `seedreamBaseURL`, `localBaseURL`) Π²Π°Π»ΠΈΠ΄ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ Π±Π΅Π»ΠΎΠΌΡƒ списку ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π΄ΠΎΠΌΠ΅Π½ΠΎΠ² ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… адрСсов. Для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… прокси ΠΈ сторонних шлюзов Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ **Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ кастомныС Base URL** (`allowCustomBaseUrl: true`) Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Β«ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Β». --- ## πŸ“¦ Быстрая установка ```bash dsh plugin --profile web add @goodandready/dsh-image-gen ``` --- ## βš™οΈ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (`settings.yaml`) ```yaml dsh-image-gen: provider: fal # fal | replicate | custom | codex | grok | local | seedream | gemini model: fal-ai/flux-2/klein/9b # МодСль ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ apiKeyEnv: FAL_API_KEY # ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ окруТСния для ΠΊΠ»ΡŽΡ‡Π° defaultSize: landscape_4_3 # square_hd | landscape_4_3 | landscape_16_9 | portrait_4_3 | portrait_16_9 defaultFormat: png # png | jpeg | webp cacheBySeed: true # Π”Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Ρ… запросов pruneDays: 30 # Автоочистка Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ sidecar ΡΡ‚Π°Ρ€ΡˆΠ΅ 30 Π΄Π½Π΅ΠΉ outputDir: generated/images # ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ сохранСния Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ``` --- ## πŸ“„ ЛицСнзия MIT Β© [GooDAnDReaDY](https://github.com/GooDAnDReaDY)