kingkont 0.7.71 → 0.7.73
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/board.js +7 -2
- package/renderer/generate.js +8 -10
- package/renderer/media.js +3 -5
- package/renderer/timeline.js +3 -4
package/package.json
CHANGED
package/renderer/board.js
CHANGED
|
@@ -1092,10 +1092,15 @@ function askName(title, placeholder = '', initialValue = '', opts = {}) {
|
|
|
1092
1092
|
document.body.append(overlay);
|
|
1093
1093
|
setTimeout(() => { inp.focus(); inp.select(); }, 30);
|
|
1094
1094
|
const close = (val) => { overlay.remove(); resolve(val); };
|
|
1095
|
+
// Различаем «отмена» (null) и «пустая строка» (''):
|
|
1096
|
+
// - Cancel button / Esc / mousedown overlay → null
|
|
1097
|
+
// - OK button / Enter → trimmed string (может быть '')
|
|
1098
|
+
// Это нужно для renameNode — юзер может ОЧИСТИТЬ имя, а это
|
|
1099
|
+
// отдельный случай от «передумал».
|
|
1095
1100
|
cancel.addEventListener('click', () => close(null));
|
|
1096
|
-
ok.addEventListener('click', () => close(inp.value.trim()
|
|
1101
|
+
ok.addEventListener('click', () => close(inp.value.trim()));
|
|
1097
1102
|
inp.addEventListener('keydown', e => {
|
|
1098
|
-
if (e.key === 'Enter') { e.preventDefault(); close(inp.value.trim()
|
|
1103
|
+
if (e.key === 'Enter') { e.preventDefault(); close(inp.value.trim()); }
|
|
1099
1104
|
if (e.key === 'Escape') { e.preventDefault(); close(null); }
|
|
1100
1105
|
});
|
|
1101
1106
|
overlay.addEventListener('mousedown', e => { if (e.target === overlay) close(null); });
|
package/renderer/generate.js
CHANGED
|
@@ -942,7 +942,9 @@ function renderLocPickSelect() {
|
|
|
942
942
|
function syncCharLocRows() {
|
|
943
943
|
const showPicker = (state.genKind === 'image' || state.genKind === 'video');
|
|
944
944
|
$('charsPickRow').style.display = showPicker ? '' : 'none';
|
|
945
|
-
|
|
945
|
+
// «Из общего» теперь только для видео — для image юзер берёт референс
|
|
946
|
+
// через @-mention из «Эта сцена»/общих досок (так универсальнее).
|
|
947
|
+
$('locPickRow').style.display = state.genKind === 'video' ? '' : 'none';
|
|
946
948
|
}
|
|
947
949
|
|
|
948
950
|
// Авто-предвыбор: если открываем доску персонажа/локации — пометим её сразу
|
|
@@ -1916,20 +1918,16 @@ async function mutateNode(bKey, boardHandle, nodeId, mutator) {
|
|
|
1916
1918
|
return;
|
|
1917
1919
|
}
|
|
1918
1920
|
}
|
|
1919
|
-
// Иначе — на диск
|
|
1921
|
+
// Иначе — на диск напрямую. Передаём ПОЛНЫЙ meta (со всеми полями), а
|
|
1922
|
+
// не выдёргиваем подмножество — иначе settings/history wipe'аются на
|
|
1923
|
+
// каждое обновление ноды во время генерации (юзер видел: defaults
|
|
1924
|
+
// сцены пропадают после нескольких генераций).
|
|
1920
1925
|
const meta = await loadBoardMetadata(boardHandle);
|
|
1921
1926
|
const node = meta.nodes.find(n => n.id === nodeId);
|
|
1922
1927
|
if (!node) return;
|
|
1923
1928
|
mutator(node);
|
|
1924
1929
|
syncHistorySlot(node);
|
|
1925
|
-
await saveBoardMetadata(boardHandle,
|
|
1926
|
-
nodes: meta.nodes,
|
|
1927
|
-
connections: meta.connections,
|
|
1928
|
-
view: meta.view,
|
|
1929
|
-
character: meta.character,
|
|
1930
|
-
location: meta.location,
|
|
1931
|
-
timeline: meta.timeline,
|
|
1932
|
-
});
|
|
1930
|
+
await saveBoardMetadata(boardHandle, meta);
|
|
1933
1931
|
}
|
|
1934
1932
|
|
|
1935
1933
|
function updateJobsBadge() {
|
package/renderer/media.js
CHANGED
|
@@ -1479,11 +1479,9 @@ async function rememberCharTones(charNameOrVoiceId, tones) {
|
|
|
1479
1479
|
ch.commonTones = existing;
|
|
1480
1480
|
ch.lastTones = cleaned;
|
|
1481
1481
|
meta.character = ch;
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
location: meta.location, timeline: meta.timeline,
|
|
1486
|
-
});
|
|
1482
|
+
// Передаём ПОЛНЫЙ meta (а не подмножество) чтобы не wipe'нуть
|
|
1483
|
+
// settings/history на диске — см. фикс в generate.js mutateNode.
|
|
1484
|
+
await saveBoardMetadata(charInfo.handle, meta);
|
|
1487
1485
|
charInfo.commonTones = existing;
|
|
1488
1486
|
charInfo.lastTones = cleaned;
|
|
1489
1487
|
if (added) console.log(`[tones] +${added} → ${charInfo.name}: ${cleaned.join(', ')}`);
|
package/renderer/timeline.js
CHANGED
|
@@ -1582,10 +1582,9 @@ async function saveCharacterReplicas(charInfo, replicas) {
|
|
|
1582
1582
|
const meta = await loadBoardMetadata(charInfo.handle);
|
|
1583
1583
|
if (!meta.character) meta.character = {};
|
|
1584
1584
|
meta.character.replicas = replicas;
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
});
|
|
1585
|
+
// Передаём ПОЛНЫЙ meta (включая settings) — иначе wipe'нем defaults
|
|
1586
|
+
// и history персонажа (см. фикс mutateNode в generate.js).
|
|
1587
|
+
await saveBoardMetadata(charInfo.handle, meta);
|
|
1589
1588
|
charInfo.replicas = replicas;
|
|
1590
1589
|
}
|
|
1591
1590
|
|