mirror of
https://github.com/vladmandic/automatic
synced 2026-09-20 01:31:13 +02:00
+3
-1
@@ -1,6 +1,6 @@
|
||||
# Change Log for SD.Next
|
||||
|
||||
## Update for 2026-07-21
|
||||
## Update for 2026-07-22
|
||||
|
||||
- **Compute**
|
||||
- torch: update to `2.13.0` for CUDA, ROCm, IPEX
|
||||
@@ -18,6 +18,7 @@
|
||||
- seedvr: enhanced upscaler support
|
||||
- logs: propagate server tracebacks to client
|
||||
- networks: improve search and filtering to allow multi-words
|
||||
- hotkeys: add alt+0-9 to switch to tab 0-9
|
||||
- **Fixes**
|
||||
- upscaler: auto-refresh to catch chainner upscalers that are not loaded on first attempt
|
||||
- lora: support diffusers trainer
|
||||
@@ -25,6 +26,7 @@
|
||||
- preview: cache image for reuse
|
||||
- kanvas: paint combined with zoom
|
||||
- rembg: numba dependencies
|
||||
- hotkeys: legacy-vs-modernui
|
||||
|
||||
## Update for 2026-07-14
|
||||
|
||||
|
||||
Submodule extensions-builtin/sdnext-modernui updated: 7cc2f614a5...77a103f087
Vendored
+14
-11
@@ -9955,6 +9955,7 @@ function getUICurrentTab() {
|
||||
return gradioApp().querySelector("#tabs button.selected");
|
||||
}
|
||||
function getUICurrentTabContent() {
|
||||
if (window.waitForUiReady) return gradioApp().querySelector(".xtabs-item:not(.hidden) > .split");
|
||||
return gradioApp().querySelector('.tabitem[id^=tab_]:not([style*="display: none"])');
|
||||
}
|
||||
var uiAfterUpdateCallbacks = [];
|
||||
@@ -10076,22 +10077,24 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
gradioObserver = new MutationObserver(mutationCallback);
|
||||
gradioObserver.observe(gradioApp(), { childList: true, subtree: true, attributes: false });
|
||||
});
|
||||
document.addEventListener("keydown", (e) => {
|
||||
let elem;
|
||||
if (e.key === "Escape") elem = getUICurrentTabContent().querySelector("button[id$=_interrupt]");
|
||||
if (e.key === "Enter" && e.ctrlKey) elem = getUICurrentTabContent().querySelector("button[id$=_generate]");
|
||||
if (e.key === "i" && e.ctrlKey) elem = getUICurrentTabContent().querySelector("button[id$=_reprocess]");
|
||||
if (e.key === " " && e.ctrlKey) elem = getUICurrentTabContent().querySelector("button[id$=_extra_networks_btn]");
|
||||
if (e.key === "n" && e.ctrlKey) elem = getUICurrentTabContent().querySelector("button[id$=_extra_networks_btn]");
|
||||
if (e.key === "s" && e.ctrlKey) elem = getUICurrentTabContent().querySelector("button[id^=save_]");
|
||||
if (e.key === "Insert" && e.ctrlKey) elem = getUICurrentTabContent().querySelector("button[id^=save_]");
|
||||
if (e.key === "d" && e.ctrlKey) elem = getUICurrentTabContent().querySelector("button[id^=delete_]");
|
||||
async function selectHotKeyElement(e, id) {
|
||||
const elem = getUICurrentTabContent().querySelector(id);
|
||||
log("hotkey", { key: e.key, meta: e.metaKey, ctrl: e.ctrlKey, alt: e.altKey, id, elid: elem?.id, elnode: elem?.nodeName });
|
||||
if (elem) {
|
||||
e.preventDefault();
|
||||
log("hotkey", { key: e.key, meta: e.metaKey, ctrl: e.ctrlKey, alt: e.altKey }, elem?.id, elem.nodeName);
|
||||
if (elem.nodeName === "BUTTON") elem.click();
|
||||
else elem.focus();
|
||||
}
|
||||
}
|
||||
document.addEventListener("keydown", (e) => {
|
||||
if (e.key === "Escape") selectHotKeyElement(e, "button[id$=_interrupt]");
|
||||
if (e.key === "Enter" && e.ctrlKey) selectHotKeyElement(e, "button[id$=_generate]");
|
||||
if (e.key === "i" && e.ctrlKey) selectHotKeyElement(e, "button[id$=_reprocess]");
|
||||
if (e.key === " " && e.ctrlKey) selectHotKeyElement(e, "button[id$=_extra_networks_btn]");
|
||||
if (e.key === "n" && e.ctrlKey) selectHotKeyElement(e, "button[id$=_extra_networks_btn]");
|
||||
if (e.key === "s" && e.ctrlKey) selectHotKeyElement(e, "button[id^=save_]");
|
||||
if (e.key === "Insert" && e.ctrlKey) selectHotKeyElement(e, "button[id^=save_]");
|
||||
if (e.key === "d" && e.ctrlKey) selectHotKeyElement(e, "button[id^=delete_]");
|
||||
});
|
||||
function getSortableCellValue(cell, sortType) {
|
||||
const rawValue = cell?.dataset?.sortValue ?? cell?.textContent?.trim() ?? "";
|
||||
|
||||
Vendored
+2
-2
File diff suppressed because one or more lines are too long
+19
-16
@@ -35,6 +35,7 @@ export function getUICurrentTab() {
|
||||
}
|
||||
|
||||
export function getUICurrentTabContent() {
|
||||
if (window.waitForUiReady) return gradioApp().querySelector('.xtabs-item:not(.hidden) > .split');
|
||||
return gradioApp().querySelector('.tabitem[id^=tab_]:not([style*="display: none"])');
|
||||
}
|
||||
|
||||
@@ -177,26 +178,28 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
gradioObserver.observe(gradioApp(), { childList: true, subtree: true, attributes: false });
|
||||
});
|
||||
|
||||
async function selectHotKeyElement(e: KeyboardEvent, id: string) {
|
||||
const elem = getUICurrentTabContent().querySelector(id);
|
||||
log('hotkey', { key: e.key, meta: e.metaKey, ctrl: e.ctrlKey, alt: e.altKey, id, elid: elem?.id, elnode: elem?.nodeName });
|
||||
if (elem) {
|
||||
e.preventDefault();
|
||||
if (elem.nodeName === 'BUTTON') elem.click();
|
||||
else elem.focus();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a listener to the document for keydown events
|
||||
*/
|
||||
document.addEventListener('keydown', (e) => {
|
||||
let elem;
|
||||
if (e.key === 'Escape') elem = getUICurrentTabContent().querySelector('button[id$=_interrupt]');
|
||||
if (e.key === 'Enter' && e.ctrlKey) elem = getUICurrentTabContent().querySelector('button[id$=_generate]');
|
||||
if (e.key === 'i' && e.ctrlKey) elem = getUICurrentTabContent().querySelector('button[id$=_reprocess]');
|
||||
if (e.key === ' ' && e.ctrlKey) elem = getUICurrentTabContent().querySelector('button[id$=_extra_networks_btn]');
|
||||
if (e.key === 'n' && e.ctrlKey) elem = getUICurrentTabContent().querySelector('button[id$=_extra_networks_btn]');
|
||||
if (e.key === 's' && e.ctrlKey) elem = getUICurrentTabContent().querySelector('button[id^=save_]');
|
||||
if (e.key === 'Insert' && e.ctrlKey) elem = getUICurrentTabContent().querySelector('button[id^=save_]');
|
||||
if (e.key === 'd' && e.ctrlKey) elem = getUICurrentTabContent().querySelector('button[id^=delete_]');
|
||||
// if (e.key === 'm' && e.ctrlKey) elem = gradioApp().getElementById('setting_sd_model_checkpoint');
|
||||
if (elem) {
|
||||
e.preventDefault();
|
||||
log('hotkey', { key: e.key, meta: e.metaKey, ctrl: e.ctrlKey, alt: e.altKey }, elem?.id, elem.nodeName);
|
||||
if (elem.nodeName === 'BUTTON') elem.click();
|
||||
else elem.focus();
|
||||
}
|
||||
if (e.key === 'Escape') selectHotKeyElement(e, 'button[id$=_interrupt]');
|
||||
if (e.key === 'Enter' && e.ctrlKey) selectHotKeyElement(e, 'button[id$=_generate]');
|
||||
if (e.key === 'i' && e.ctrlKey) selectHotKeyElement(e, 'button[id$=_reprocess]');
|
||||
if (e.key === ' ' && e.ctrlKey) selectHotKeyElement(e, 'button[id$=_extra_networks_btn]');
|
||||
if (e.key === 'n' && e.ctrlKey) selectHotKeyElement(e, 'button[id$=_extra_networks_btn]');
|
||||
if (e.key === 's' && e.ctrlKey) selectHotKeyElement(e, 'button[id^=save_]');
|
||||
if (e.key === 'Insert' && e.ctrlKey) selectHotKeyElement(e, 'button[id^=save_]');
|
||||
if (e.key === 'd' && e.ctrlKey) selectHotKeyElement(e, 'button[id^=delete_]');
|
||||
});
|
||||
|
||||
function getSortableCellValue(cell, sortType) {
|
||||
|
||||
+1
-1
Submodule wiki updated: c66bc2864b...53cdbf62ab
Reference in New Issue
Block a user