修复种草图生成:以三合一主图为参考 img2img 生成,按颜色分配(每色优先、超出随机补足);新增 BR/CA/DE/ES/IT/PL/SA 七国配置与提示词;删除验证用测试脚本
This commit is contained in:
@@ -8,7 +8,8 @@
|
||||
4. 用完全用:池中种子数 ≤ 需要数时全部使用(不再随机限量/截断);
|
||||
5. 每个国家独立配置:configs/countries/<country>.yaml 的 style.seeds / related.seed_keywords。
|
||||
|
||||
limit 由 seed_node 从 context 注入(max_style_seeds / max_related_seeds,0 或缺失=不限)。
|
||||
limit 由 seed_node 从 context 注入:max_seeds(单一总量,不再按类型分,从统一池随机抽后均分
|
||||
style/related);兼容旧参数 max_style_seeds / max_related_seeds(0 或缺失=不限)。
|
||||
LLM 后端生成失败时自动回退到静态+节日主题,保证不中断。
|
||||
"""
|
||||
import random
|
||||
@@ -87,14 +88,22 @@ class DynamicStrategy(SeedStrategy):
|
||||
add(dyn_related, 1.0, "dynamic")
|
||||
|
||||
items = list(pool.values())
|
||||
limit_total = int(context.get("max_seeds") or 0)
|
||||
limit_style = int(context.get("max_style_seeds") or 0)
|
||||
limit_related = int(context.get("max_related_seeds") or 0)
|
||||
|
||||
# 2) 每次随机取(加权,不重复);池不足 → 全部用
|
||||
style_pick = _weighted_sample(items, limit_style)
|
||||
style_keys = {id(it) for it in style_pick}
|
||||
remaining = [it for it in items if id(it) not in style_keys]
|
||||
related_pick = _weighted_sample(remaining, limit_related)
|
||||
if limit_total > 0:
|
||||
# 不再按类型分:从统一池随机抽 max_seeds 个,均分到 style/related(各约一半)
|
||||
pick = _weighted_sample(items, limit_total)
|
||||
half = (len(pick) + 1) // 2
|
||||
style_pick = pick[:half]
|
||||
related_pick = pick[half:]
|
||||
else:
|
||||
# 兼容旧参数(max_style_seeds / max_related_seeds 分别限量)
|
||||
style_pick = _weighted_sample(items, limit_style)
|
||||
style_keys = {id(it) for it in style_pick}
|
||||
remaining = [it for it in items if id(it) not in style_keys]
|
||||
related_pick = _weighted_sample(remaining, limit_related)
|
||||
|
||||
return {
|
||||
"style_seeds": [it["word"] for it in style_pick],
|
||||
|
||||
@@ -101,6 +101,74 @@ _HOLIDAYS_BY_COUNTRY: Dict[str, List[tuple]] = {
|
||||
("Boxing Day", 12, 26, None, 21),
|
||||
("Halloween", 10, 31, None, 21),
|
||||
],
|
||||
"DE": [
|
||||
("New Year", 1, 1, None, 14),
|
||||
("Valentine's Day", 2, 14, None, 21),
|
||||
("Easter", 0, 0, "easter", 21),
|
||||
("Oktoberfest", 9, 21, "third_saturday", 30), # 啤酒节(9 月第三个周六)
|
||||
("German Unity Day", 10, 3, None, 21),
|
||||
("Halloween", 10, 31, None, 30),
|
||||
("Advent Season", 11, 30, None, 30),
|
||||
("Christmas", 12, 25, None, 30),
|
||||
("Boxing Day", 12, 26, None, 14),
|
||||
],
|
||||
"BR": [
|
||||
("New Year", 1, 1, None, 14),
|
||||
("Carnival", 2, 15, None, 30), # 狂欢节(浮动,2 月近似)
|
||||
("Easter", 0, 0, "easter", 21),
|
||||
("Tiradentes Day", 4, 21, None, 14),
|
||||
("Independence Day (BR)", 9, 7, None, 21),
|
||||
("Children's Day (BR)", 10, 12, None, 21),
|
||||
("Halloween", 10, 31, None, 30),
|
||||
("Christmas", 12, 25, None, 30),
|
||||
("New Year Eve", 12, 31, None, 14),
|
||||
],
|
||||
"SA": [
|
||||
("New Year", 1, 1, None, 14),
|
||||
("Saudi Founding Day", 2, 22, None, 21),
|
||||
("Saudi National Day", 9, 23, None, 30),
|
||||
("Winter Season", 12, 1, None, 30),
|
||||
],
|
||||
"PL": [
|
||||
("New Year", 1, 1, None, 14),
|
||||
("Valentine's Day", 2, 14, None, 21),
|
||||
("Easter", 0, 0, "easter", 21),
|
||||
("Constitution Day (PL)", 5, 3, None, 21),
|
||||
("Halloween", 10, 31, None, 30),
|
||||
("Independence Day (PL)", 11, 11, None, 21),
|
||||
("Christmas", 12, 25, None, 30),
|
||||
("Boxing Day", 12, 26, None, 14),
|
||||
],
|
||||
"ES": [
|
||||
("Three Kings Day", 1, 6, None, 14),
|
||||
("Valentine's Day", 2, 14, None, 21),
|
||||
("Easter (Semana Santa)", 0, 0, "easter", 21),
|
||||
("Feria de Abril", 4, 15, None, 21),
|
||||
("La Tomatina", 8, 27, None, 21),
|
||||
("Halloween", 10, 31, None, 30),
|
||||
("Christmas", 12, 25, None, 30),
|
||||
("New Year Eve", 12, 31, None, 14),
|
||||
],
|
||||
"IT": [
|
||||
("New Year", 1, 1, None, 14),
|
||||
("Epiphany", 1, 6, None, 14),
|
||||
("Valentine's Day", 2, 14, None, 21),
|
||||
("Carnevale", 2, 15, None, 21),
|
||||
("Easter", 0, 0, "easter", 21),
|
||||
("Ferragosto", 8, 15, None, 21),
|
||||
("Halloween", 10, 31, None, 30),
|
||||
("Christmas", 12, 25, None, 30),
|
||||
],
|
||||
"CA": [
|
||||
("New Year", 1, 1, None, 14),
|
||||
("Valentine's Day", 2, 14, None, 21),
|
||||
("Easter", 0, 0, "easter", 21),
|
||||
("Canada Day", 7, 1, None, 21),
|
||||
("Thanksgiving (CA)", 10, 12, None, 21), # 10 月第 2 周一(近似固定日)
|
||||
("Halloween", 10, 31, None, 30),
|
||||
("Christmas", 12, 25, None, 30),
|
||||
("Boxing Day", 12, 26, None, 14),
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
@@ -147,6 +215,9 @@ def _resolve(name: str, month: int, day: int, rule, year: int) -> Optional[datet
|
||||
if rule == "labor":
|
||||
first = datetime.date(year, month, 1)
|
||||
return first + datetime.timedelta(days=(0 - first.weekday()) % 7)
|
||||
if rule == "third_saturday":
|
||||
first = datetime.date(year, month, 1)
|
||||
return first + datetime.timedelta(days=(5 - first.weekday()) % 7 + 2 * 7)
|
||||
return None
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user