add loaded-loras api endpoint

Signed-off-by: Vladimir Mandic <mandic00@live.com>
This commit is contained in:
Vladimir Mandic
2026-07-12 13:10:35 +02:00
parent d31a99edb0
commit 03473c1316
8 changed files with 34 additions and 7 deletions
+9 -4
View File
@@ -4,11 +4,14 @@
### Highlights for 2026-07-12
*What's New?* Full 3 days(!) since there release, we're bringing a service pack update:
**Anima** has new *Aesthetic* and *Turbo* variants, UI log viewer now allows monitoring and easy sharing of server and client logs
There are quite a few SDNQ improvements and we're continuing with enhanced support for 3rd party finetunes
*What's New?* Full week(!) since there release, we're bringing a service pack update:
**Anima** has new *Aesthetic* and *Turbo* variants
But also:
- UI updates to Server info and Log viewers, more informative and allows easier sharing of info
- Quite a few SDNQ improvements, both to quantization and attention
- Continuing with enhanced support for 3rd party finetunes
*Note*: As long as there are no major items in #dev branch, we will continue with weekly service updates, so stay tuned for more!
*Note*: As long as there are no major items in `#dev` branch, we will continue with weekly service updates, so stay tuned for more!
[Home](https://vladmandic.github.io/sdnext/) | [ChangeLog](https://github.com/vladmandic/automatic/blob/master/CHANGELOG.md) | [Docs](https://vladmandic.github.io/sdnext-docs/) | [Discord](https://discord.com/invite/sd-next-federal-batch-inspectors-1101998836328697867) | [Sponsor](https://github.com/sponsors/vladmandic)
@@ -28,6 +31,8 @@ There are quite a few SDNQ improvements and we're continuing with enhanced suppo
- sdnq: improve attention
- api: add `/sdapi/v1/restart` endpoint
- **UI**
- improved server info panel
now shows loaded components, networks, etc.
- improved log viewer for both server and client logs
- expose server errors
- log view copy server log and copy client log buttons
+7
View File
@@ -26,6 +26,12 @@ def post_refresh_loras():
return result
def get_loaded():
"""Return a list of currently loaded LoRA networks with name, alias, path, and metadata."""
from modules.lora import lora_common
return [obj.name for obj in lora_common.loaded_networks]
def _invalidate_extra_networks():
"""Reset extra-networks page caches so the v2 API picks up changes."""
from modules import shared
@@ -38,3 +44,4 @@ def register_api(api):
api.add_api_route("/sdapi/v1/lora", get_lora, methods=["GET"], response_model=dict, tags=["Enumerators"])
api.add_api_route("/sdapi/v1/loras", get_loras, methods=["GET"], response_model=list[dict], tags=["Enumerators"])
api.add_api_route("/sdapi/v1/refresh-loras", post_refresh_loras, methods=["POST"], tags=["Functional"])
api.add_api_route("/sdapi/v1/loaded-loras", get_loaded, methods=["GET"], response_model=list[str], tags=["Enumerators"])
+1
View File
@@ -31,6 +31,7 @@ log_cost = {
"/sdapi/v1/memory": -1,
"/sdapi/v1/platform": -1,
"/sdapi/v1/checkpoint": -1,
"/sdapi/v1/loaded-loras": -1,
"/sdapi/v1/gpu-smi": -1,
"/sdapi/v1/status": 60,
"/sdapi/v1/progress": 60,
+6
View File
@@ -10313,9 +10313,13 @@ async function setupControlUI() {
// ui/extraNetworks.ts
var activePromptTextarea = {};
var selectedNetworks = {};
var sortVal = -1;
var totalCards = -1;
var lastTab = "control";
function getSelectedNetworks() {
return selectedNetworks;
}
var getENActiveTab = () => {
let tabName = "";
if (gradioApp().getElementById("txt2img_prompt")?.checkVisibility() || gradioApp().getElementById("txt2img_generate")?.checkVisibility()) tabName = "txt2img";
@@ -10544,6 +10548,7 @@ function sortExtraNetworks(fixed = "no") {
}
async function markSelectedCards(selected, page = "") {
log("markSelectedCards", selected, page);
selectedNetworks[page] = selected;
gradioApp().querySelectorAll(".extra-network-cards .card").forEach((el2) => {
if (page.length > 0 && el2.dataset.page !== page) return;
if (selected.includes(el2.dataset.name) || selected.includes(el2.dataset.short)) el2.classList.add("card-selected");
@@ -10856,6 +10861,7 @@ window.applyStyles = applyStyles;
window.closeDetailsEN = closeDetailsEN;
window.getENActivePage = getENActivePage;
window.getCardDetails = getCardDetails;
window.getSelectedNetworks = getSelectedNetworks;
window.sortExtraNetworks = sortExtraNetworks;
window.refeshDetailsEN = refeshDetailsEN;
window.extraNetworksSearchButton = extraNetworksSearchButton;
+2 -2
View File
File diff suppressed because one or more lines are too long
+7
View File
@@ -4,12 +4,17 @@ import { authFetch } from './authWrap';
import { timer } from './timers';
const activePromptTextarea = {};
const selectedNetworks = {};
let sortVal = -1;
let totalCards = -1;
let lastTab = 'control';
// helpers
export function getSelectedNetworks() {
return selectedNetworks;
}
export const getENActiveTab = () => {
let tabName = '';
if (gradioApp().getElementById('txt2img_prompt')?.checkVisibility() || gradioApp().getElementById('txt2img_generate')?.checkVisibility()) tabName = 'txt2img';
@@ -307,6 +312,7 @@ function refreshENInput(tabName) {
export async function markSelectedCards(selected, page = '') {
log('markSelectedCards', selected, page);
selectedNetworks[page] = selected;
gradioApp().querySelectorAll('.extra-network-cards .card').forEach((el) => {
if (page.length > 0 && el.dataset.page !== page) return; // filter by page
if (selected.includes(el.dataset.name) || selected.includes(el.dataset.short)) el.classList.add('card-selected');
@@ -660,6 +666,7 @@ window.applyStyles = applyStyles;
window.closeDetailsEN = closeDetailsEN;
window.getENActivePage = getENActivePage;
window.getCardDetails = getCardDetails;
window.getSelectedNetworks = getSelectedNetworks;
window.sortExtraNetworks = sortExtraNetworks;
window.refeshDetailsEN = refeshDetailsEN;
window.extraNetworksSearchButton = extraNetworksSearchButton;
+1
View File
@@ -102,6 +102,7 @@ declare global {
closeDetailsEN?: (...args: unknown[]) => unknown[]; // ui/extraNetworks.ts
extraNetworksFilterVersion?: (event: Event) => void; // ui/extraNetworks.ts
extraNetworksSearchButton?: (event: Event) => void; // ui/extraNetworks.ts
getSelectedNetworks?: () => Record<string, string[]>; // ui/extraNetworks.ts
getCardDetails?: (...args: unknown[]) => unknown[]; // ui/extraNetworks.ts
quickSaveStyle?: () => void; // ui/extraNetworks.ts
getENActivePage?: () => string; // ui/extraNetworks.ts