SAkizuki commited on
Commit
71cc343
·
verified ·
1 Parent(s): 6164549

Auto-sync from GitHub Actions

Browse files
Files changed (2) hide show
  1. mcp_server.py +3 -8
  2. 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
- 从环境变量读取 OSS 配置,返回 oss2.Bucket 对象
104
- 若环境变量不完整或 oss2 未安装则返回 None
 
105
  """
106
- ak = os.environ.get('OSS_ACCESS_KEY_ID')
107
- sk = os.environ.get('OSS_ACCESS_KEY_SECRET')
108
- ep = os.environ.get('OSS_ENDPOINT')
109
- bkt = os.environ.get('OSS_BUCKET_NAME')
110
- if not all([ak, sk, ep, bkt]):
111
- return None
112
- try:
113
- import oss2
114
- auth = oss2.Auth(ak, sk)
115
- endpoint = ep if ep.startswith('http') else f'https://{ep}'
116
- return oss2.Bucket(auth, endpoint, bkt)
117
- except ImportError:
118
- print('[PlatformUtils] oss2 未安装,OSS 计数器不可用。请 pip install oss2。')
119
- return None
 
 
 
 
 
 
 
 
 
 
 
 
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: