kingkont 0.20.21 → 0.20.23

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kingkont",
3
- "version": "0.20.21",
3
+ "version": "0.20.23",
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/board.js CHANGED
@@ -3932,6 +3932,15 @@ async function createNodeEl(node) {
3932
3932
  goToLinkedBoard(node);
3933
3933
  return;
3934
3934
  }
3935
+ // Нода ещё не сгенерирована (есть параметры, но нет файла) — открываем
3936
+ // модалку генерации, чтобы юзер мог запустить / поправить параметры.
3937
+ // Юзер: «дабл-клик на ноде до генерации должен показывать окно
3938
+ // генерации (сейчас показывает Параметры генерации)». Это покрывает
3939
+ // draft-ноды, error-ноды и любые ноды без node.file.
3940
+ if (node.generated && !node.file) {
3941
+ regenerateNode(node);
3942
+ return;
3943
+ }
3935
3944
  if (node.type === 'audio' && node.file) {
3936
3945
  regenerateNode(node);
3937
3946
  return;
@@ -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
- // источника). Если потом юзер выберет другой aspect — это его выбор,
452
- // и при следующем открытии modal'а с source мы снова поставим source
453
- // (это per-open default, не sticky).
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
- // и выбираем ближайший из видео-списка. localStorage НЕ обновляем —
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
  }
@@ -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');