diff --git a/locales/de.json b/locales/de.json index e92069fc..e5d9a2c0 100644 --- a/locales/de.json +++ b/locales/de.json @@ -101,7 +101,8 @@ "checkpointNameCopied": "Checkpoint-Name kopiert", "toggleBlur": "Unschärfe umschalten", "show": "Anzeigen", - "openExampleImages": "Beispielbilder-Ordner öffnen" + "openExampleImages": "Beispielbilder-Ordner öffnen", + "replacePreview": "Vorschau ersetzen" }, "nsfw": { "matureContent": "Nicht jugendfreie Inhalte", @@ -240,6 +241,12 @@ "always": "Kopf- und Fußzeilen sind immer sichtbar", "hover": "Kopf- und Fußzeilen erscheinen nur beim Darüberfahren mit der Maus" }, + "modelCardFooterAction": "Aktion der Modellkarten-Schaltfläche", + "modelCardFooterActionOptions": { + "exampleImages": "Beispielbilder öffnen", + "replacePreview": "Vorschau ersetzen" + }, + "modelCardFooterActionHelp": "Wähle aus, was die Schaltfläche unten rechts auf der Karte ausführt.", "modelNameDisplay": "Anzeige des Modellnamens", "modelNameDisplayOptions": { "modelName": "Modellname", diff --git a/locales/en.json b/locales/en.json index 23580ab5..33273a56 100644 --- a/locales/en.json +++ b/locales/en.json @@ -101,7 +101,8 @@ "checkpointNameCopied": "Checkpoint name copied", "toggleBlur": "Toggle blur", "show": "Show", - "openExampleImages": "Open Example Images Folder" + "openExampleImages": "Open Example Images Folder", + "replacePreview": "Replace Preview" }, "nsfw": { "matureContent": "Mature Content", @@ -240,6 +241,12 @@ "always": "Headers and footers are always visible", "hover": "Headers and footers only appear when hovering over a card" }, + "modelCardFooterAction": "Model Card Button Action", + "modelCardFooterActionOptions": { + "exampleImages": "Open Example Images", + "replacePreview": "Replace Preview" + }, + "modelCardFooterActionHelp": "Choose what the bottom-right card button does.", "modelNameDisplay": "Model Name Display", "modelNameDisplayOptions": { "modelName": "Model Name", diff --git a/locales/es.json b/locales/es.json index 0fade06f..6dc983d4 100644 --- a/locales/es.json +++ b/locales/es.json @@ -101,7 +101,8 @@ "checkpointNameCopied": "Nombre del checkpoint copiado", "toggleBlur": "Alternar difuminado", "show": "Mostrar", - "openExampleImages": "Abrir carpeta de imágenes de ejemplo" + "openExampleImages": "Abrir carpeta de imágenes de ejemplo", + "replacePreview": "Reemplazar vista previa" }, "nsfw": { "matureContent": "Contenido para adultos", @@ -240,6 +241,12 @@ "always": "Los encabezados y pies de página siempre son visibles", "hover": "Los encabezados y pies de página solo aparecen al pasar el ratón sobre una tarjeta" }, + "modelCardFooterAction": "Acción del botón de tarjeta de modelo", + "modelCardFooterActionOptions": { + "exampleImages": "Abrir imágenes de ejemplo", + "replacePreview": "Reemplazar vista previa" + }, + "modelCardFooterActionHelp": "Elige qué hace el botón en la esquina inferior derecha de la tarjeta.", "modelNameDisplay": "Visualización del nombre del modelo", "modelNameDisplayOptions": { "modelName": "Nombre del modelo", diff --git a/locales/fr.json b/locales/fr.json index 0d0976e1..5b68a35a 100644 --- a/locales/fr.json +++ b/locales/fr.json @@ -101,7 +101,8 @@ "checkpointNameCopied": "Nom du checkpoint copié", "toggleBlur": "Basculer le flou", "show": "Afficher", - "openExampleImages": "Ouvrir le dossier d'images d'exemple" + "openExampleImages": "Ouvrir le dossier d'images d'exemple", + "replacePreview": "Remplacer l'aperçu" }, "nsfw": { "matureContent": "Contenu pour adultes", @@ -240,6 +241,12 @@ "always": "Les en-têtes et pieds de page sont toujours visibles", "hover": "Les en-têtes et pieds de page n'apparaissent qu'au survol d'une carte" }, + "modelCardFooterAction": "Action du bouton de carte de modèle", + "modelCardFooterActionOptions": { + "exampleImages": "Ouvrir les images d'exemple", + "replacePreview": "Remplacer l'aperçu" + }, + "modelCardFooterActionHelp": "Choisissez ce que fait le bouton en bas à droite de la carte.", "modelNameDisplay": "Affichage du nom du modèle", "modelNameDisplayOptions": { "modelName": "Nom du modèle", diff --git a/locales/he.json b/locales/he.json index e4a14d81..40587bc8 100644 --- a/locales/he.json +++ b/locales/he.json @@ -101,7 +101,8 @@ "checkpointNameCopied": "שם Checkpoint הועתק", "toggleBlur": "הפעל/כבה טשטוש", "show": "הצג", - "openExampleImages": "פתח תיקיית תמונות דוגמה" + "openExampleImages": "פתח תיקיית תמונות דוגמה", + "replacePreview": "החלף תצוגה מקדימה" }, "nsfw": { "matureContent": "תוכן למבוגרים", @@ -240,6 +241,12 @@ "always": "כותרות עליונות ותחתונות תמיד גלויות", "hover": "כותרות עליונות ותחתונות מופיעות רק בעת ריחוף מעל כרטיס" }, + "modelCardFooterAction": "פעולת כפתור כרטיס מודל", + "modelCardFooterActionOptions": { + "exampleImages": "פתח תמונות דוגמה", + "replacePreview": "החלף תצוגה מקדימה" + }, + "modelCardFooterActionHelp": "בחר מה עושה הכפתור בפינה הימנית התחתונה של הכרטיס.", "modelNameDisplay": "תצוגת שם מודל", "modelNameDisplayOptions": { "modelName": "שם מודל", diff --git a/locales/ja.json b/locales/ja.json index 96c5f967..07aabe6d 100644 --- a/locales/ja.json +++ b/locales/ja.json @@ -101,7 +101,8 @@ "checkpointNameCopied": "checkpointの名前をコピーしました", "toggleBlur": "ぼかしの切り替え", "show": "表示", - "openExampleImages": "例画像フォルダを開く" + "openExampleImages": "例画像フォルダを開く", + "replacePreview": "プレビューを置換" }, "nsfw": { "matureContent": "成人向けコンテンツ", @@ -240,6 +241,12 @@ "always": "ヘッダーとフッターが常に表示されます", "hover": "カードにホバーしたときのみヘッダーとフッターが表示されます" }, + "modelCardFooterAction": "モデルカードボタンのアクション", + "modelCardFooterActionOptions": { + "exampleImages": "例画像を開く", + "replacePreview": "プレビューを置換" + }, + "modelCardFooterActionHelp": "カード右下のボタンが何をするかを選択します。", "modelNameDisplay": "モデル名表示", "modelNameDisplayOptions": { "modelName": "モデル名", diff --git a/locales/ko.json b/locales/ko.json index 584a75e9..762bb16c 100644 --- a/locales/ko.json +++ b/locales/ko.json @@ -101,7 +101,8 @@ "checkpointNameCopied": "Checkpoint 이름 복사됨", "toggleBlur": "블러 토글", "show": "보기", - "openExampleImages": "예시 이미지 폴더 열기" + "openExampleImages": "예시 이미지 폴더 열기", + "replacePreview": "미리보기 교체" }, "nsfw": { "matureContent": "성인 콘텐츠", @@ -240,6 +241,12 @@ "always": "헤더와 푸터가 항상 보입니다", "hover": "카드에 마우스를 올렸을 때만 헤더와 푸터가 나타납니다" }, + "modelCardFooterAction": "모델 카드 버튼 동작", + "modelCardFooterActionOptions": { + "exampleImages": "예시 이미지 열기", + "replacePreview": "미리보기 교체" + }, + "modelCardFooterActionHelp": "카드 우측 하단 버튼이 수행할 작업을 선택하세요.", "modelNameDisplay": "모델명 표시", "modelNameDisplayOptions": { "modelName": "모델명", diff --git a/locales/ru.json b/locales/ru.json index 7197a0ae..a7359854 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -101,7 +101,8 @@ "checkpointNameCopied": "Имя checkpoint скопировано", "toggleBlur": "Переключить размытие", "show": "Показать", - "openExampleImages": "Открыть папку с примерами" + "openExampleImages": "Открыть папку с примерами", + "replacePreview": "Заменить превью" }, "nsfw": { "matureContent": "Контент для взрослых", @@ -240,6 +241,12 @@ "always": "Заголовки и подписи всегда видны", "hover": "Заголовки и подписи появляются только при наведении на карточку" }, + "modelCardFooterAction": "Действие кнопки карточки модели", + "modelCardFooterActionOptions": { + "exampleImages": "Открыть примеры изображений", + "replacePreview": "Заменить превью" + }, + "modelCardFooterActionHelp": "Выберите, что делает кнопка в правом нижнем углу карточки.", "modelNameDisplay": "Отображение названия модели", "modelNameDisplayOptions": { "modelName": "Название модели", diff --git a/locales/zh-CN.json b/locales/zh-CN.json index 6b79753e..a3d7829f 100644 --- a/locales/zh-CN.json +++ b/locales/zh-CN.json @@ -101,7 +101,8 @@ "checkpointNameCopied": "检查点名称已复制", "toggleBlur": "切换模糊", "show": "显示", - "openExampleImages": "打开示例图片文件夹" + "openExampleImages": "打开示例图片文件夹", + "replacePreview": "替换预览" }, "nsfw": { "matureContent": "成熟内容", @@ -240,6 +241,12 @@ "always": "标题和底部始终显示", "hover": "仅在悬停卡片时显示标题和底部" }, + "modelCardFooterAction": "模型卡片按钮操作", + "modelCardFooterActionOptions": { + "exampleImages": "打开示例图片", + "replacePreview": "替换预览" + }, + "modelCardFooterActionHelp": "选择右下角卡片按钮的功能。", "modelNameDisplay": "模型名称显示", "modelNameDisplayOptions": { "modelName": "模型名称", diff --git a/locales/zh-TW.json b/locales/zh-TW.json index 631617d1..f22b2e5e 100644 --- a/locales/zh-TW.json +++ b/locales/zh-TW.json @@ -101,7 +101,8 @@ "checkpointNameCopied": "Checkpoint 名稱已複製", "toggleBlur": "切換模糊", "show": "顯示", - "openExampleImages": "開啟範例圖片資料夾" + "openExampleImages": "開啟範例圖片資料夾", + "replacePreview": "更換預覽圖" }, "nsfw": { "matureContent": "成熟內容", @@ -240,6 +241,12 @@ "always": "標題與頁腳始終可見", "hover": "標題與頁腳僅在滑鼠懸停時顯示" }, + "modelCardFooterAction": "模型卡片按鈕操作", + "modelCardFooterActionOptions": { + "exampleImages": "開啟範例圖片", + "replacePreview": "更換預覽圖" + }, + "modelCardFooterActionHelp": "選擇右下角卡片按鈕的功能。", "modelNameDisplay": "模型名稱顯示", "modelNameDisplayOptions": { "modelName": "模型名稱", diff --git a/py/routes/handlers/misc_handlers.py b/py/routes/handlers/misc_handlers.py index c4473ca9..a902c2ae 100644 --- a/py/routes/handlers/misc_handlers.py +++ b/py/routes/handlers/misc_handlers.py @@ -163,6 +163,7 @@ class SettingsHandler: "show_only_sfw", "compact_mode", "priority_tags", + "model_card_footer_action", "model_name_display", ) diff --git a/py/services/settings_manager.py b/py/services/settings_manager.py index 18b9209f..1094037a 100644 --- a/py/services/settings_manager.py +++ b/py/services/settings_manager.py @@ -46,6 +46,7 @@ DEFAULT_SETTINGS: Dict[str, Any] = { "compact_mode": False, "priority_tags": DEFAULT_PRIORITY_TAG_CONFIG.copy(), "model_name_display": "model_name", + "model_card_footer_action": "example_images", } @@ -317,6 +318,7 @@ class SettingsManager: 'cardInfoDisplay': 'card_info_display', 'includeTriggerWords': 'include_trigger_words', 'compactMode': 'compact_mode', + 'modelCardFooterAction': 'model_card_footer_action', } updated = False diff --git a/static/js/components/shared/ModelCard.js b/static/js/components/shared/ModelCard.js index 9d425f9e..a60b1642 100644 --- a/static/js/components/shared/ModelCard.js +++ b/static/js/components/shared/ModelCard.js @@ -491,7 +491,13 @@ export function createModelCard(model, modelType) { // Generate UI text with i18n support const toggleBlurTitle = translate('modelCard.actions.toggleBlur', {}, 'Toggle blur'); const showButtonText = translate('modelCard.actions.show', {}, 'Show'); - const openExampleImagesTitle = translate('modelCard.actions.openExampleImages', {}, 'Open Example Images Folder'); + const footerActionSetting = state.global.settings.model_card_footer_action || 'example_images'; + const footerActionTitle = footerActionSetting === 'replace_preview' + ? translate('modelCard.actions.replacePreview', {}, 'Replace Preview') + : translate('modelCard.actions.openExampleImages', {}, 'Open Example Images Folder'); + const footerActionIcon = footerActionSetting === 'replace_preview' + ? 'fas fa-image' + : 'fas fa-folder-open'; card.innerHTML = `