diff --git a/scripts/generate_dota2_douyin_images.py b/scripts/generate_dota2_douyin_images.py index 2fd8df6..86103c5 100644 --- a/scripts/generate_dota2_douyin_images.py +++ b/scripts/generate_dota2_douyin_images.py @@ -223,67 +223,6 @@ 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: """ 构造统一风格的提示词。 @@ -295,8 +234,13 @@ 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_variant = build_text_variant_spec(hero, image_index) - text_language_label = text_variant["language"] + text_language = resolve_text_language(image_index) + if text_language == "zh": + text_language_desc = "画面中的标题、副标题、能力说明文字统一使用中文排版,字体要有热血漫画海报感,禁止出现日文。" + text_language_label = "中文" + else: + text_language_desc = "画面中的标题、副标题、能力说明文字统一使用日文排版,字体要有热血漫画海报感,禁止出现中文。" + text_language_label = "日文" return f""" 请为短视频封面创作一张高完成度竖版插画,主体是 Dota2 英雄 {hero_name_cn}({hero_name_en})。 @@ -306,18 +250,16 @@ 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_variant["text_spec"]} -10. 左下角的能力雷达图可以保留,但图内不要写复杂中文或复杂日文,只允许非常少量、清晰、规则的英文缩写标签,例如 ATK、DEF、SPD、MAG、ULT。 +9. {text_language_desc} 稳定性要求: 1. 全系列都保持相同的版式语言、相同的信息层级、相同的雷达图位置、相同的标题风格。 2. 当前是同一英雄的第 {image_index} 张候选图,本张必须输出{text_language_label}版本;请只在姿势、镜头角度、背景能量流向上做有限变化,不要改变整体系列风格。 3. 不要出现水印、签名、Logo、拼贴、多角色、手部崩坏、脸部畸形、文字糊成乱码。 -4. 不要生成小字,不要生成说明段落,不要生成多行密集文本,不要在画面边缘塞满看不清的字。 """.strip()