From 5881998499f02e8e3c9484ae974805de759383b6 Mon Sep 17 00:00:00 2001 From: liuwei Date: Wed, 29 Apr 2026 15:46:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96Dota2=E7=94=9F=E5=9B=BE?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E8=AF=8D=E4=B8=AD=E7=9A=84=E4=B8=AD=E6=96=87?= =?UTF-8?q?=E6=96=87=E5=AD=97=E7=94=9F=E6=88=90=E7=BA=A6=E6=9D=9F\n\n-=20?= =?UTF-8?q?=E4=B8=BA=E4=B8=AD=E6=97=A5=E6=96=87=E7=89=88=E6=9C=AC=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=9B=BA=E5=AE=9A=E6=A0=87=E9=A2=98=E4=B8=8E=E5=89=AF?= =?UTF-8?q?=E6=A0=87=E9=A2=98=E6=96=87=E6=A1=88=E6=A8=A1=E6=9D=BF\n-=20?= =?UTF-8?q?=E6=94=B6=E7=B4=A7=E6=8F=90=E7=A4=BA=E8=AF=8D=EF=BC=8C=E9=99=90?= =?UTF-8?q?=E5=88=B6=E5=8F=AA=E7=94=9F=E6=88=90=E5=B0=91=E9=87=8F=E5=A4=A7?= =?UTF-8?q?=E5=AD=97=E5=B9=B6=E7=A6=81=E6=AD=A2=E5=B0=8F=E5=AD=97=E5=92=8C?= =?UTF-8?q?=E5=AF=86=E9=9B=86=E8=AF=B4=E6=98=8E\n-=20=E5=B0=86=E9=9B=B7?= =?UTF-8?q?=E8=BE=BE=E5=9B=BE=E6=96=87=E5=AD=97=E7=BA=A6=E6=9D=9F=E4=B8=BA?= =?UTF-8?q?=E7=AE=80=E7=9F=AD=E8=8B=B1=E6=96=87=E7=BC=A9=E5=86=99=E4=BB=A5?= =?UTF-8?q?=E9=99=8D=E4=BD=8E=E4=B8=AD=E6=96=87=E9=94=99=E5=AD=97=E6=A6=82?= =?UTF-8?q?=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/generate_dota2_douyin_images.py | 76 ++++++++++++++++++++++--- 1 file changed, 67 insertions(+), 9 deletions(-) diff --git a/scripts/generate_dota2_douyin_images.py b/scripts/generate_dota2_douyin_images.py index 86103c5..2fd8df6 100644 --- a/scripts/generate_dota2_douyin_images.py +++ b/scripts/generate_dota2_douyin_images.py @@ -223,6 +223,67 @@ def resolve_text_language(image_index: int) -> str: return DEFAULT_LANGUAGE_VARIANTS[variant_index] +def build_text_variant_spec(hero: Dict[str, str], image_index: int) -> Dict[str, str]: + """ + 为当前候选图生成更严格的文案版式约束。 + + 优化思路: + 1. 让模型只画“少量、大号、固定”的文字,减少中文错字和糊字概率; + 2. 中文版本只保留英雄名 + 一个四字短句,不再要求大量小字说明; + 3. 雷达图内部不再放复杂中文标签,只允许简短英文缩写,降低文字生成难度; + 4. 每张图给一个明确的标题/副标题组合,让模型更容易稳定复现。 + """ + hero_name_cn = hero["localized_name"] + hero_name_en = hero["english_name"].upper() + text_language = resolve_text_language(image_index) + + zh_variants = [ + { + "title": hero_name_cn, + "subtitle": "至宝觉醒", + }, + { + "title": hero_name_cn, + "subtitle": "王者降临", + }, + ] + ja_variants = [ + { + "title": hero_name_en, + "subtitle": "覚醒", + }, + { + "title": hero_name_en, + "subtitle": "降臨", + }, + ] + + if text_language == "zh": + variant = zh_variants[(image_index - 1) % len(zh_variants)] + return { + "language": "中文", + "title": variant["title"], + "subtitle": variant["subtitle"], + "text_spec": ( + f"画面里只允许出现两组大字中文,且必须准确写成:主标题“{variant['title']}”,副标题“{variant['subtitle']}”。" + "文字必须足够大、足够粗、边缘清晰、像漫画海报印刷字。" + "宁可字少,也不要出现任何小字、密集说明、段落字、模糊字、错别字。" + ), + } + + variant = ja_variants[(image_index - 1) % len(ja_variants)] + return { + "language": "日文", + "title": variant["title"], + "subtitle": variant["subtitle"], + "text_spec": ( + f"画面里只允许出现两组大字,且必须准确写成:主标题“{variant['title']}”,副标题“{variant['subtitle']}”。" + "文字必须足够大、足够粗、边缘清晰、像漫画海报印刷字。" + "宁可字少,也不要出现任何小字、密集说明、段落字、模糊字、乱码。" + ), + } + + def build_consistent_prompt(hero: Dict[str, str], image_index: int) -> str: """ 构造统一风格的提示词。 @@ -234,13 +295,8 @@ def build_consistent_prompt(hero: Dict[str, str], image_index: int) -> str: """ hero_name_cn = hero["localized_name"] hero_name_en = hero["english_name"] - text_language = resolve_text_language(image_index) - if text_language == "zh": - text_language_desc = "画面中的标题、副标题、能力说明文字统一使用中文排版,字体要有热血漫画海报感,禁止出现日文。" - text_language_label = "中文" - else: - text_language_desc = "画面中的标题、副标题、能力说明文字统一使用日文排版,字体要有热血漫画海报感,禁止出现中文。" - text_language_label = "日文" + text_variant = build_text_variant_spec(hero, image_index) + text_language_label = text_variant["language"] return f""" 请为短视频封面创作一张高完成度竖版插画,主体是 Dota2 英雄 {hero_name_cn}({hero_name_en})。 @@ -250,16 +306,18 @@ def build_consistent_prompt(hero: Dict[str, str], image_index: int) -> str: 2. 画面整体要强烈偏向 JOJO 气质:夸张肌肉与体块、强烈明暗对比、戏剧化姿势、锐利线条、张力十足的漫画分镜感、厚重阴影、速度线、压迫感构图。 3. 需要比普通日漫更偏 JOJO 风,风格统一、成熟、硬朗、华丽,视觉冲击力强。 4. 画面左下角固定放一个“能力雷达图”,用日式游戏 UI 风格表现,半透明发光面板,结构清晰。 -5. 画面中加入醒目的文字排版,像热血漫画标题与角色名字幕,排版要高级,不能乱码。 +5. 画面中加入醒目的漫画海报式文字排版,但文字数量必须极少,只保留主标题和副标题两组大字。 6. 构图固定为 9:16 竖版海报,适合抖音封面,角色居中偏上,保留底部与左下角的信息区。 7. 背景使用史诗感能量、替身感氛围、漫画速度线、粒子、光效,但不要遮挡主体脸和武器。 8. 质感统一为高细节、高完成度、商业海报、收藏级插画。 -9. {text_language_desc} +9. {text_variant["text_spec"]} +10. 左下角的能力雷达图可以保留,但图内不要写复杂中文或复杂日文,只允许非常少量、清晰、规则的英文缩写标签,例如 ATK、DEF、SPD、MAG、ULT。 稳定性要求: 1. 全系列都保持相同的版式语言、相同的信息层级、相同的雷达图位置、相同的标题风格。 2. 当前是同一英雄的第 {image_index} 张候选图,本张必须输出{text_language_label}版本;请只在姿势、镜头角度、背景能量流向上做有限变化,不要改变整体系列风格。 3. 不要出现水印、签名、Logo、拼贴、多角色、手部崩坏、脸部畸形、文字糊成乱码。 +4. 不要生成小字,不要生成说明段落,不要生成多行密集文本,不要在画面边缘塞满看不清的字。 """.strip()