kingkont 0.20.22 → 0.20.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/renderer/generate.js +28 -8
- package/renderer/settings.js +9 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kingkont",
|
|
3
|
-
"version": "0.20.
|
|
3
|
+
"version": "0.20.24",
|
|
4
4
|
"description": "KingKont \u00b7 Chatium \u2014 \u043d\u043e\u0434-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u0446\u0435\u043d \u0441 AI-\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439 (\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438/\u0432\u0438\u0434\u0435\u043e/\u0433\u043e\u043b\u043e\u0441/SFX/\u043c\u0443\u0437\u044b\u043a\u0430/\u0442\u0435\u043a\u0441\u0442)",
|
|
5
5
|
"main": "main.js",
|
|
6
6
|
"bin": {
|
package/renderer/generate.js
CHANGED
|
@@ -446,21 +446,34 @@ async function openGenModal(kind) {
|
|
|
446
446
|
if (typeof loadAllLocationsInfo === 'function') loadAllLocationsInfo().catch(() => {});
|
|
447
447
|
syncSourceRefRow();
|
|
448
448
|
syncDefaultPromptRow();
|
|
449
|
+
// Дефолт aspect ratio из настроек сцены. Юзер: «во втором кейсе я нажал
|
|
450
|
+
// 1:1, в первом увидел что 1:1 уже выделен и ничего не менял — нужно
|
|
451
|
+
// выделять по дефолту то, что настроено в схеме». Раньше дефолт брался
|
|
452
|
+
// из localStorage ('последний выбранный глобально'), а scene.settings.
|
|
453
|
+
// aspectRatio учитывался только в startGenerationJob как middle-fallback
|
|
454
|
+
// — но к этому моменту genSubmit уже зафиксировал node.generated.aspectRatio
|
|
455
|
+
// = state.imageAspect, и `??` boardAspect никогда не срабатывал. Теперь
|
|
456
|
+
// модалка на открытии всегда подтягивает scene-default, и юзер видит то
|
|
457
|
+
// что реально будет применено.
|
|
458
|
+
const boardAsp = state.currentBoard?.metadata?.settings?.aspectRatio || null;
|
|
459
|
+
if (kind === 'image' && boardAsp) {
|
|
460
|
+
state.imageAspect = boardAsp;
|
|
461
|
+
}
|
|
462
|
+
if (kind === 'video' && boardAsp) {
|
|
463
|
+
state.videoAspect = boardAsp;
|
|
464
|
+
}
|
|
449
465
|
// Если открываем image-генерацию и есть исходная картинка-референс —
|
|
450
466
|
// дефолт «↺ Как у исходной» (юзер обычно хочет такой же формат как у
|
|
451
|
-
// источника).
|
|
452
|
-
//
|
|
453
|
-
// (
|
|
467
|
+
// источника). Source перебивает scene-default — это явное намерение.
|
|
468
|
+
// Если потом юзер выберет другой aspect — это его выбор, и при следующем
|
|
469
|
+
// открытии modal'а с source мы снова поставим source (per-open default).
|
|
454
470
|
if (kind === 'image'
|
|
455
471
|
&& state.sourceRef && state.sourceRef.type === 'image' && state.sourceRef.use) {
|
|
456
472
|
state.imageAspect = 'source';
|
|
457
|
-
syncImageAspectActive();
|
|
458
473
|
}
|
|
459
474
|
// Для video-из-картинки нет 'source' опции (ratios у video свои), но
|
|
460
475
|
// юзер всё равно ожидает сохранения пропорций. Считаем aspect картинки
|
|
461
|
-
// и выбираем ближайший из видео-списка.
|
|
462
|
-
// это per-open default, не sticky (следующий open без source вернёт
|
|
463
|
-
// последний явный выбор юзера).
|
|
476
|
+
// и выбираем ближайший из видео-списка. Source перебивает scene-default.
|
|
464
477
|
if (kind === 'video'
|
|
465
478
|
&& state.sourceRef && state.sourceRef.type === 'image' && state.sourceRef.use) {
|
|
466
479
|
computeSourceMediaAspect(VIDEO_ASPECTS).then(asp => {
|
|
@@ -470,6 +483,9 @@ async function openGenModal(kind) {
|
|
|
470
483
|
}
|
|
471
484
|
});
|
|
472
485
|
}
|
|
486
|
+
// Sync UI после всех решений выше.
|
|
487
|
+
syncImageAspectActive();
|
|
488
|
+
if (typeof syncVideoOptionsActive === 'function') syncVideoOptionsActive();
|
|
473
489
|
$('genModal').classList.remove('hidden');
|
|
474
490
|
setTimeout(() => $('genPrompt').focus(), 50);
|
|
475
491
|
}
|
|
@@ -1629,7 +1645,11 @@ $('genSubmit').addEventListener('click', async () => {
|
|
|
1629
1645
|
const saveOnly = state.genSaveOnly === true;
|
|
1630
1646
|
state.genSaveOnly = false;
|
|
1631
1647
|
const rawPrompt = $('genPrompt').value.trim();
|
|
1632
|
-
|
|
1648
|
+
// Промпт обязателен только для запуска генерации. Юзер: «если я просто
|
|
1649
|
+
// сохраняю ноду, то нужно уметь сохранить её без описания (сейчас требует)».
|
|
1650
|
+
// saveOnly создаёт draft-ноду с уже выбранными параметрами (модель, aspect),
|
|
1651
|
+
// юзер потом руками введёт промпт и запустит — это валидный workflow.
|
|
1652
|
+
if (!rawPrompt && !saveOnly) { alert('Введи описание'); return; }
|
|
1633
1653
|
const kind = state.genKind;
|
|
1634
1654
|
|
|
1635
1655
|
// ===== Regenerate существующей ноды — с возможно изменённым промптом/настройками =====
|
package/renderer/settings.js
CHANGED
|
@@ -794,13 +794,18 @@ async function openGenerateForRef(fromNode, clientX, clientY, forceKind) {
|
|
|
794
794
|
syncSourceRefRow();
|
|
795
795
|
if (typeof syncDefaultPromptRow === 'function') syncDefaultPromptRow();
|
|
796
796
|
|
|
797
|
+
// Дефолт aspect ratio из настроек сцены — та же логика что в openGenModal
|
|
798
|
+
// (юзер: «нужно выделять по дефолту то, что настроено в схеме»).
|
|
799
|
+
// Source-ref перебивает scene-default, см. ниже.
|
|
800
|
+
const boardAsp = state.currentBoard?.metadata?.settings?.aspectRatio || null;
|
|
801
|
+
if (forceKind === 'image' && boardAsp) state.imageAspect = boardAsp;
|
|
802
|
+
if (forceKind === 'video' && boardAsp) state.videoAspect = boardAsp;
|
|
797
803
|
// Если генерим image из существующей картинки-ноды — дефолт «↺ Как у
|
|
798
804
|
// исходной» (юзер обычно хочет такой же формат как у источника).
|
|
799
805
|
// Та же логика что в openGenModal, для anchor-drag-to-generate flow.
|
|
800
806
|
if (forceKind === 'image'
|
|
801
807
|
&& state.sourceRef && state.sourceRef.type === 'image' && state.sourceRef.use) {
|
|
802
808
|
state.imageAspect = 'source';
|
|
803
|
-
syncImageAspectActive();
|
|
804
809
|
}
|
|
805
810
|
// Video-из-картинки: подбираем ближайший видео-aspect к natural-aspect
|
|
806
811
|
// картинки (см. openGenModal для аналогичной логики).
|
|
@@ -813,6 +818,9 @@ async function openGenerateForRef(fromNode, clientX, clientY, forceKind) {
|
|
|
813
818
|
}
|
|
814
819
|
});
|
|
815
820
|
}
|
|
821
|
+
// Sync UI после всех решений выше.
|
|
822
|
+
syncImageAspectActive();
|
|
823
|
+
if (typeof syncVideoOptionsActive === 'function') syncVideoOptionsActive();
|
|
816
824
|
|
|
817
825
|
closeMentionPopup();
|
|
818
826
|
$('genModal').classList.remove('hidden');
|