diff --git a/CHANGELOG.md b/CHANGELOG.md index 59f0b59..79ad06d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ Follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) · versioned wi --- +## [1.20.41] — 2026-08-19 + +### Changed +- **Character portraits and concept art now lazy-load.** Off-screen images no longer load all at once when large cast lists are opened. + ## [1.20.40] — 2026-08-19 ### Added diff --git a/VERSION b/VERSION index 3af842e..25a96bd 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.20.40 +1.20.41 diff --git a/static/index.html b/static/index.html index c80bc92..c47fcd7 100644 --- a/static/index.html +++ b/static/index.html @@ -10,7 +10,7 @@ - + @@ -27,7 +27,7 @@ - + @@ -378,7 +378,7 @@ window.toggleNavTree = function(treeId, chevronId) { - + diff --git a/static/js/library-characters.js b/static/js/library-characters.js index 45a4a18..381d150 100644 --- a/static/js/library-characters.js +++ b/static/js/library-characters.js @@ -951,7 +951,7 @@ function _charsTableHtml(chars, sortMode, sortDir) { const pct = score != null ? Math.max(0, Math.min(100, score)) : null; const tagList = String(rec.tags || '').split(',').map(function (t) { return t.trim(); }).filter(Boolean); const avatarInner = rec.image - ? '' + escHtml(rec.name) + '' + ? '' + escHtml(rec.name) + '' : escHtml((rec.name || '?')[0].toUpperCase()); const occupation = _libStr(sh.profession); const ageLabel = _charAgeLabel(sh); @@ -1178,7 +1178,7 @@ async function _charDetailPage(rec, allChars, opts) { const avatarHtml = '
' + (rec.image - ? '
' + escHtml(rec.name) + '
' + ? '
' + escHtml(rec.name) + '
' : '
' + escHtml((rec.name || '?')[0].toUpperCase()) + '
') + '
'; @@ -1197,7 +1197,7 @@ async function _charDetailPage(rec, allChars, opts) { + '' + '' + (sh.concept_art_image - ? '
Concept art — ' + escHtml(rec.name) + '
' + ? '
Concept art — ' + escHtml(rec.name) + '
' : '
' + '' + '' + (_libStr(sh.concept_art_prompt).trim() ? 'Kein Konzeptbild' : 'Kein Konzeptbild-Prompt — erst unten bei Generation Prompts erzeugen') + '' @@ -1594,7 +1594,7 @@ function _charDetailModal(rec, allChars) { const voiceId = rec.voice ? (typeof rec.voice === 'object' ? (rec.voice.id || '') : String(rec.voice)) : ''; const avatarHtml = rec.image - ? '
' + escHtml(rec.name) + '
' + ? '
' + escHtml(rec.name) + '
' : '
' + escHtml((rec.name || '?')[0].toUpperCase()) + '
'; const alignHtml = pct != null ? (