Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
Auto-sync from GitHub Actions
Browse files- mcp_server.py +3 -8
- platform_utils.py +38 -16
mcp_server.py
CHANGED
|
@@ -507,7 +507,7 @@ Anima 是一个 2B 参数的文生图模型(CircleStone Labs × Comfy Org)
|
|
| 507 |
[quality/meta/safety], [2girls / 1girl 1boy],
|
| 508 |
[character_A name], [series_A], [A hair], [A eyes], [A clothing], [A body], [A expression],
|
| 509 |
[character_B name], [series_B], [B hair], [B eyes], [B clothing], [B body], [B expression],
|
| 510 |
-
[shared pose/action], [background], [atmosphere], [composition]
|
| 511 |
```
|
| 512 |
|
| 513 |
## 标签体系速查
|
|
@@ -520,16 +520,11 @@ Anima 是一个 2B 参数的文生图模型(CircleStone Labs × Comfy Org)
|
|
| 520 |
- 具体年份:`year 2025`, `year 2024` ...
|
| 521 |
- 时期:`newest` (2022-2023), `recent` (2019-2021), `mid` (2015-2018), `early` (2011-2014), `old` (2005-2010)
|
| 522 |
|
| 523 |
-
### 元标签
|
| 524 |
-
`highres`, `absurdres`, `anime screenshot`, `jpeg artifacts`, `official art`
|
| 525 |
-
|
| 526 |
### 安全分级
|
| 527 |
`safe`, `sensitive`, `nsfw`, `explicit`
|
| 528 |
|
| 529 |
### 艺术家标签
|
| 530 |
-
**必须以 @ 开头**。没有 @ 前缀的风格几乎不生效。
|
| 531 |
-
|
| 532 |
-
格式:`@nnn yryr`, `@big chungus`
|
| 533 |
|
| 534 |
一段提示词中最多包含3个艺术家标签。
|
| 535 |
|
|
@@ -589,7 +584,7 @@ Anima 在多人场景中极易发生特征混淆。必须严格遵守:
|
|
| 589 |
|
| 590 |
1. **角色属性按角色分组排列**。同一角色的发型、瞳色、服装、体型连续出现后再切换。严禁交叉排列(如 `blue hair, red hair, short hair, long hair`)。
|
| 591 |
|
| 592 |
-
2. **自然语言中为每个角色写一句"外观锚定短语"**。格式:`CharacterName with [key features]...` 明确指出视觉归属。这比仅靠标签的防串扰效果强得多。
|
| 593 |
|
| 594 |
3. **使用空间方位词分离角色**:left/right/foreground/background。
|
| 595 |
|
|
|
|
| 507 |
[quality/meta/safety], [2girls / 1girl 1boy],
|
| 508 |
[character_A name], [series_A], [A hair], [A eyes], [A clothing], [A body], [A expression],
|
| 509 |
[character_B name], [series_B], [B hair], [B eyes], [B clothing], [B body], [B expression],
|
| 510 |
+
[shared pose/action], [background], [atmosphere], [composition], [@artist]
|
| 511 |
```
|
| 512 |
|
| 513 |
## 标签体系速查
|
|
|
|
| 520 |
- 具体年份:`year 2025`, `year 2024` ...
|
| 521 |
- 时期:`newest` (2022-2023), `recent` (2019-2021), `mid` (2015-2018), `early` (2011-2014), `old` (2005-2010)
|
| 522 |
|
|
|
|
|
|
|
|
|
|
| 523 |
### 安全分级
|
| 524 |
`safe`, `sensitive`, `nsfw`, `explicit`
|
| 525 |
|
| 526 |
### 艺术家标签
|
| 527 |
+
**必须以 @ 开头**。没有 @ 前缀的风格几乎不生效。格式:`@nnn yryr`, `@big chungus`
|
|
|
|
|
|
|
| 528 |
|
| 529 |
一段提示词中最多包含3个艺术家标签。
|
| 530 |
|
|
|
|
| 584 |
|
| 585 |
1. **角色属性按角色分组排列**。同一角色的发型、瞳色、服装、体型连续出现后再切换。严禁交叉排列(如 `blue hair, red hair, short hair, long hair`)。
|
| 586 |
|
| 587 |
+
2. **自然语言中为每个角色写一句"外观锚定短语"**。格式:`CharacterName with [key features]... do something...` 明确指出视觉归属。这比仅靠标签的防串扰效果强得多。
|
| 588 |
|
| 589 |
3. **使用空间方位词分离角色**:left/right/foreground/background。
|
| 590 |
|
platform_utils.py
CHANGED
|
@@ -51,6 +51,7 @@ platform_utils.py
|
|
| 51 |
from __future__ import annotations
|
| 52 |
|
| 53 |
import os
|
|
|
|
| 54 |
import time
|
| 55 |
from dataclasses import dataclass
|
| 56 |
from pathlib import Path
|
|
@@ -98,25 +99,46 @@ def nsfw_allowed() -> bool:
|
|
| 98 |
|
| 99 |
# 阿里云 OSS
|
| 100 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
def _get_oss_bucket():
|
| 102 |
"""
|
| 103 |
-
|
| 104 |
-
|
|
|
|
| 105 |
"""
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 120 |
|
| 121 |
|
| 122 |
def _oss_key(filename: str) -> str:
|
|
|
|
| 51 |
from __future__ import annotations
|
| 52 |
|
| 53 |
import os
|
| 54 |
+
import threading
|
| 55 |
import time
|
| 56 |
from dataclasses import dataclass
|
| 57 |
from pathlib import Path
|
|
|
|
| 99 |
|
| 100 |
# 阿里云 OSS
|
| 101 |
|
| 102 |
+
# 进程级 OSS Bucket 单例:复用同一个 requests.Session 与连接池,
|
| 103 |
+
# 避免每次计数器自增都构造新的 Bucket / HTTPAdapter 造成堆碎片。
|
| 104 |
+
# 配置(OSS_*)在进程生命周期内固定,不支持运行中变更。
|
| 105 |
+
_oss_bucket_singleton = None
|
| 106 |
+
_oss_bucket_initialized = False
|
| 107 |
+
_oss_bucket_lock = threading.Lock()
|
| 108 |
+
|
| 109 |
+
|
| 110 |
def _get_oss_bucket():
|
| 111 |
"""
|
| 112 |
+
返回模块级单例 oss2.Bucket。首次调用时按环境变量构造,之后所有
|
| 113 |
+
调用复用同一个 Bucket(含其内部 HTTP Session 与连接池)。
|
| 114 |
+
若环境变量不完整或 oss2 未安装则返回 None(同样会被缓存)。
|
| 115 |
"""
|
| 116 |
+
global _oss_bucket_singleton, _oss_bucket_initialized
|
| 117 |
+
if _oss_bucket_initialized:
|
| 118 |
+
return _oss_bucket_singleton
|
| 119 |
+
|
| 120 |
+
with _oss_bucket_lock:
|
| 121 |
+
# double-checked locking:另一线程可能已在锁外完成初始化
|
| 122 |
+
if _oss_bucket_initialized:
|
| 123 |
+
return _oss_bucket_singleton
|
| 124 |
+
|
| 125 |
+
ak = os.environ.get('OSS_ACCESS_KEY_ID')
|
| 126 |
+
sk = os.environ.get('OSS_ACCESS_KEY_SECRET')
|
| 127 |
+
ep = os.environ.get('OSS_ENDPOINT')
|
| 128 |
+
bkt = os.environ.get('OSS_BUCKET_NAME')
|
| 129 |
+
if not all([ak, sk, ep, bkt]):
|
| 130 |
+
_oss_bucket_initialized = True
|
| 131 |
+
return None
|
| 132 |
+
try:
|
| 133 |
+
import oss2
|
| 134 |
+
auth = oss2.Auth(ak, sk)
|
| 135 |
+
endpoint = ep if ep.startswith('http') else f'https://{ep}'
|
| 136 |
+
_oss_bucket_singleton = oss2.Bucket(auth, endpoint, bkt)
|
| 137 |
+
except ImportError:
|
| 138 |
+
print('[PlatformUtils] oss2 未安装,OSS 计数器不可用。请 pip install oss2。')
|
| 139 |
+
_oss_bucket_singleton = None
|
| 140 |
+
_oss_bucket_initialized = True
|
| 141 |
+
return _oss_bucket_singleton
|
| 142 |
|
| 143 |
|
| 144 |
def _oss_key(filename: str) -> str:
|