Skip to content

Commit 1fc3f6a

Browse files
committed
新增:NSFW 开关
1 parent b87e482 commit 1fc3f6a

File tree

3 files changed

+36
-8
lines changed

3 files changed

+36
-8
lines changed

model_manager.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -227,21 +227,26 @@ def get_model_display_info(self, model_path: str) -> dict:
227227
"preview_url": None,
228228
"description": "未找到模型信息",
229229
"baseModel": "未知",
230+
"nsfw": False,
231+
"nsfwLevel": 0,
230232
}
231233

232234
info = model_info.get("info", {})
233235
model_data = info.get("model", {})
234-
preview_url = info.get("images", [{}])[0].get("url") if info.get("images") else None
236+
preview_image = info.get("images", [{}])[0] if info.get("images") else {}
237+
preview_url = preview_image.get("url")
235238

236239
# 添加本地图片路径
237240
local_preview = info.get("local_preview")
238241

239242
return {
240243
"name": model_data.get("name", Path(model_path).name),
241244
"type": model_data.get("type", "未知"),
242-
"preview_url": local_preview or preview_url, # 优先使用本地路径
245+
"preview_url": local_preview or preview_url,
243246
"baseModel": info.get("baseModel", "未知"),
244-
"url": f"https://civitai.com/models/{info['modelId']}?modelVersionId={info['id']}"
247+
"url": f"https://civitai.com/models/{info['modelId']}?modelVersionId={info['id']}",
248+
"nsfw": model_data.get("nsfw", False),
249+
"nsfwLevel": preview_image.get("nsfwLevel", 0),
245250
}
246251

247252
def get_all_models_info(self) -> list:

requirements.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
fastapi
22
uvicorn
33
requests
4-
python-multipart
5-
pydantic
64
aiohttp
75
aiofiles
86
pyinstaller

templates/index.html

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@
4444
<nav class="navbar navbar-expand-lg">
4545
<div class="container-fluid">
4646
<span class="navbar-brand">Stable Diffusion 模型管理器</span>
47+
<div class="form-check form-switch me-3">
48+
<input class="form-check-input" type="checkbox" role="switch" id="nsfwToggle">
49+
<label class="form-check-label" for="nsfwToggle">显示 NSFW</label>
50+
</div>
4751
<button class="btn btn-outline ms-auto" id="darkModeToggle">
4852
<i class="bi bi-sun-fill" id="lightIcon"></i>
4953
<i class="bi bi-moon-stars-fill d-none" id="darkIcon"></i>
@@ -148,6 +152,16 @@
148152
type: new Set()
149153
};
150154

155+
// NSFW 显示状态
156+
let showNSFW = false;
157+
const nsfwToggle = document.getElementById('nsfwToggle');
158+
159+
// 监听 NSFW 开关
160+
nsfwToggle.addEventListener('change', (e) => {
161+
showNSFW = e.target.checked;
162+
displayModels(allModels); // 重新显示模型列表
163+
});
164+
151165
// 检查系统暗黑模式
152166
function updateDarkModeUI(isDark) {
153167
document.documentElement.setAttribute('data-bs-theme', isDark ? 'dark' : 'light');
@@ -276,8 +290,11 @@
276290

277291
// 显示模型列表
278292
function displayModels(models) {
293+
// 根据 NSFW 开关过滤模型
294+
const filteredModels = showNSFW ? models : models.filter(model => !model.nsfw && model.nsfwLevel < 3);
295+
279296
// 按类型分组模型
280-
const modelsByType = models.reduce((acc, model) => {
297+
const modelsByType = filteredModels.reduce((acc, model) => {
281298
const type = model.type || '未知';
282299
if (!acc[type]) {
283300
acc[type] = [];
@@ -349,12 +366,15 @@
349366
<div class="card h-100">
350367
${imageHtml}
351368
<div class="card-body">
352-
<h5 class="card-title">${model.name}</h5>
369+
<div class="d-flex justify-content-between align-items-start mb-2">
370+
<h5 class="card-title mb-0">${model.name}</h5>
371+
${model.nsfw ? '<span class="badge text-bg-danger">NSFW</span>' : ''}
372+
</div>
353373
<p class="card-text">
354374
<small class="d-block">类型: ${model.type}</small>
355375
<small class="d-block">基础模型: ${model.baseModel || '未知'}</small>
356376
</p>
357-
${model.url ? `<a href="${model.url}" class="btn btn-primary btn-sm" target="_blank">查看详情</a>` : ''}
377+
${model.url ? `<a href="${model.url}" class="btn btn-outline-primary btn-sm" target="_blank">查看详情</a>` : ''}
358378
</div>
359379
</div>
360380
`;
@@ -501,6 +521,11 @@ <h5 class="card-title">${model.name}</h5>
501521
);
502522
}
503523

524+
// 应用 NSFW 过滤
525+
if (!showNSFW) {
526+
filteredModels = filteredModels.filter(model => !model.nsfw && model.nsfwLevel < 3);
527+
}
528+
504529
displayModels(filteredModels);
505530
}
506531

0 commit comments

Comments
 (0)