feat(inspirations): 灵感库 - 将内置英文提示词统一为中文 (#763)

* feat(inspirations): 灵感库 - 统一中文正文入口并校验译文版本

* feat(inspirations): 灵感库 - 发布完整中文提示词并阻止旧译文覆盖

统一 1319 条外部提示词和 329 条画廊引用,保留来源与模板参数;校验全部原文摘要,防止上游更新后误用过期中文。

验证:Bun 1.3.9 全量 2261 项测试通过,前端构建与 lint 通过,目录身份及媒体元数据对比无变化。
This commit is contained in:
Medivh authored and GitHub committed 2026-10-13 19:12:44 +08:00
1 parent 26dfb8d91b
commit 88de4ce422
12 files changed
+6673 -1705

No files matched your search

File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+26 -26
View File
@@ -52,7 +52,7 @@
"description": "一个用于生成宽幅引言卡的提示,卡片上有一位名人的肖像,背景为棕色,引言文字为浅金色衬线…",
"image": "/inspiration-thumbs/youmind/151.webp",
"mode": "image",
"prompt": "一张宽幅引言卡片,上面印有一位名人,背景为棕色,引言文字为浅金色衬线字体:“{argument name=\"famous_quote\" default=\"Stay Hungry, Stay Foolish\"}”,下方是较小的文字:“—{argument name=\"author\" default=\"Steve Jobs\"}”。文字前面有一个大而柔和的引号。人物肖像在左侧,文字在右侧。文字占据图片的三分之二,肖像占据三分之一,肖像部分带有轻微的渐变过渡效果。",
"prompt": "一张宽幅引言卡片,上面印有一位名人,背景为棕色,引言文字为浅金色衬线字体:“{argument name=\"famous_quote\" default=\"Stay Hungry, Stay Foolish\"}”,下方是较小的文字:“—{argument name=\"author\" default=\"Steve Jobs\"}”。文字前面有一个大而柔和的引号。人物肖像在左侧,文字在右侧。文字占据图片的三分之二,肖像占据三分之一,肖像部分带有轻微的渐变过渡效果。\n参数说明:默认引言“Stay Hungry, Stay Foolish”意为“求知若饥,虚心若愚”,署名 Steve Jobs 为史蒂夫·乔布斯。引言与署名可替换。",
"sourceId": "youmind",
"credit": "Nicolechan",
"sourceUrl": "https://x.com/stark_nico99/status/1991718646570426763"
@@ -183,11 +183,11 @@
},
{
"id": "youmind:35748",
"title": "South Asian Selfie Mirror Prompt",
"description": "A detailed prompt for generating a selfie o…",
"title": "南亚女性拱形镜自拍",
"description": "传统花卉服饰、暖金拱镜与自然笑容的写实自拍。",
"image": "https://cms-assets.youmind.com/media/1790922802807_sied9u_HTgTEoOW4AAUHrD.jpg",
"mode": "image",
"prompt": "A beautiful young South Asian woman taking a confident selfie in front of a large glowing arched mirror. She has long, voluminous wavy brown hair with golden highlights, fair skin, and a radiant smile showing her teeth. She is wearing stylish gold-framed aviator sunglasses.\nShe is dressed in an elegant white traditional Pakistani/Indian kurta with delicate pink floral embroidery and patterns, paired with a sheer pink floral dupatta gracefully draped around her neck and shoulders. Her right hand is giving a cheerful thumbs-up, while her left hand holds a white iPhone 13/14 Pro. She is wearing a black smartwatch on her left wrist.\nThe background features a modern minimalist interior with a large illuminated warm golden archway creating a soft, dreamy glow around her. Bright, cinematic lighting, highly detailed, realistic skin texture, sharp focus, elegant and vibrant color palette, professional photography style, 8k quality.",
"prompt": "一位美丽的年轻南亚女性站在一面大型发光拱形镜前,自信地自拍。她留着蓬松的棕色长波浪卷发,带金色挑染;肤色白皙,露齿笑容明亮,戴时髦的金框飞行员太阳镜。\n她穿优雅的白色巴基斯坦/印度传统库尔塔长上衣,饰有精致的粉色花卉刺绣与图案;搭配轻薄透明的粉色花卉杜帕塔披巾,优雅地绕在颈部和肩头。右手愉快地竖起拇指,左手拿白色 iPhone 13/14 Pro,左腕戴黑色智能手表。\n背景是现代极简室内空间,大型暖金色发光拱门在她周围形成柔和、梦幻的光晕。明亮的电影级布光,高度精细,真实肤质,焦点清晰,配色优雅而鲜活,专业摄影风格,8K 画质。",
"category": "profile-avatar",
"sourceId": "youmind",
"credit": "Rabia Ai",
@@ -763,7 +763,7 @@
"description": "用于基于上传图片创建电影感 YouTube 缩略图的提示词,指定字体样式、字幕文本和宽…",
"image": "/inspiration-thumbs/youmind/34926.webp",
"mode": "image",
"prompt": "扮演专业平面设计师和缩略图设计师的角色,使用附带的图片创建高质量的电影感、吸引人且醒目的 Montserrat 字体风格字幕。\n\n缩略图的字幕为 [\"{argument name=\"caption_text\" default=\"You Don't Need To Edit Anymore... AI is Here Now\"}\"]。确保在混合背景效果中使用精美的图像。我的宽高比为 16:9",
"prompt": "扮演专业平面设计师和缩略图设计师的角色,使用附带的图片创建高质量的电影感、吸引人且醒目的 Montserrat 字体风格字幕。\n\n缩略图的字幕为 [\"{argument name=\"caption_text\" default=\"You Don't Need To Edit Anymore... AI is Here Now\"}\"]。确保在混合背景效果中使用精美的图像。我的宽高比为 16:9\n默认字幕的中文含义:“你再也不需要剪辑了……AI 已经来了。”可替换该字幕参数。",
"category": "youtube-thumbnail",
"sourceId": "youmind",
"credit": "Nsofor Ngozika | NGVisuals",
@@ -847,7 +847,7 @@
"description": "一个高度技术化、SQL 风格的逻辑提示词,用于创建 2x2 的排版电影海报网格,其中图…",
"image": "https://cms-assets.youmind.com/media/1785568117051_2qk1u7_HOUvoOKXsAArLa_.jpg",
"mode": "image",
"prompt": "2x2 网格,16:9,针对 4 部著名电影执行此操作:TYPOGRAPHIC_EMERGENCE SELECT visual_output FROM latent_graphic_systems WHERE subject = {argument name=\"电影主题\" default=\"[CENTRAL_IMAGE]\"} AND mark_substrate = '连续的叙述性文字,近距离清晰可见' AND type_density_map = infer(VALUE_STRUCTURE FROM SUBJECT_SILHOUETTE) AND line_flow = infer(TEXT_PATH FROM SUBJECT_CONTOUR) AND typeface_logic = {argument name=\"排版风格\" default=\"infer(PERIOD_APPROPRIATE_FACE FROM AUTHOR, PUBLICATION_ERA)\"} AND color_scheme = {argument name=\"配色方案\" default=\"'陈旧纸张上的墨迹,单色值,完全没有任何插图标记'\"} AND drawing_rule = '图像中的每个标记都是字形;色调值仅通过行距、字间距和字号产生;无规则、无填充、无手绘线条' ORDER BY emergence_at_distance DESC, legibility_at_close_range DESC, value_range_via_typography DESC, no_non_letterform_marks DESC LIMIT 1;",
"prompt": "以 2×2 网格呈现 4 部著名电影,整体画幅 16:9。采用“文字逐渐汇聚成像”的电影海报设计:\n主题为 {argument name=\"电影主题\" default=\"[CENTRAL_IMAGE]\"}。画面完全由连续的叙述性文字构成,近看每段文字清晰可读,远看文字的疏密自然显现主体图像。\n根据主体轮廓及其明暗结构推导文字密度,让每行文字沿主体外形流动。\n排版风格为 {argument name=\"排版风格\" default=\"infer(PERIOD_APPROPRIATE_FACE FROM AUTHOR, PUBLICATION_ERA)\"},即依据作者和出版年代推断符合时代的字体。\n配色方案为 {argument name=\"配色方案\" default=\"'陈旧纸张上的墨迹,单色值,完全没有任何插图标记'\"}。\n绘制规则:画面中的每一道痕迹都必须是字形。只通过行距、字距和字号形成明暗,不使用辅助线、填色块或手绘线条。\n优先保证:远观成像明确、近看文字可读、排版形成丰富的明暗层次、完全不存在非字形标记。为这一设计输出一张最终画面。",
"category": "youtube-thumbnail",
"sourceId": "youmind",
"credit": "Gadgetify",
@@ -895,7 +895,7 @@
"description": "一个伪代码结构的提示词,用于生成具有电影质感和高端风格的体育纪录片系列主视觉图。",
"image": "https://cms-assets.youmind.com/media/1782805347982_5yi9cb_HL0CqIlWsAAMFzm.jpg",
"mode": "image",
"prompt": "do this for {argument name=\"event\" default=\"2026 年阿根廷世界杯\"}, void main() { string player = \"{argument name=\"player\" default=\"[球员]\"}\"; string team = \"{argument name=\"team\" default=\"[球队]\"}\"; // --- 系列剧集(推断戏剧性叙事弧线) --- Arc a = infer_career_drama(player); // 天才岁月 / 流放时期 / 王者归来 - 选择高端叙事角度 tone(restrained, moody, character_first); // 非喧闹风格 - 沉静而厚重 // --- 主视觉构图 --- portrait(infer_player_persona(player), contemplative, half_shadow); environment(symbolic_setting(a), atmospheric, shallow_focus); // 空旷的体育场 / 球员通道 / 玻璃上的雨滴 grade(infer_team_colors(team), desaturated_prestige, single_accent); // --- 流媒体排版(扁平化覆盖层) --- title(invent_series_title(player), elegant_serif_or_thin_sans, centered); tagline(invent_logline(player), small, below_title); platform_mark(\"LIMITED SERIES\", \"NOW STREAMING\", micro_caps, corner); laurels(invent_critic_pullquotes(), thin); render(cinematic_still, film_grain: fine, premium_negative_space); }",
"prompt": "为 {argument name=\"event\" default=\"2026 年阿根廷世界杯\"} 创作一张高端体育纪录片系列主视觉图。\n球员:{argument name=\"player\" default=\"[球员]\"};球队:{argument name=\"team\" default=\"[球队]\"}。\n叙事:从球员职业生涯推导具有戏剧性的故事弧线,可选择天才岁月、流放时期或王者归来等角度。气质克制、沉静而厚重,以人物为中心,不做喧闹宣传风。\n构图:根据球员个性塑造沉思中的肖像,半张脸隐于阴影。背景选择与故事相关的象征性环境,如空旷体育场、球员通道或带雨滴的玻璃,氛围浓郁,浅景深。\n调色:提取球队颜色,采用高端、低饱和的调色,仅保留一个强调色。\n排版:采用流媒体剧集海报的扁平文字覆盖层。为球员构思系列标题,以优雅衬线体或纤细无衬线体居中呈现;标题下用小字放一句概括故事的宣传语。角落用微型大写字标注“LIMITED SERIES”(限定剧集)和“NOW STREAMING”(正在播出)。构思简短影评摘句,搭配纤细的桂冠装饰。\n渲染为电影剧照质感,带细微胶片颗粒和充足而精致的留白。",
"category": "youtube-thumbnail",
"sourceId": "youmind",
"credit": "Gadgetify",
@@ -1543,7 +1543,7 @@
"description": "一种独特的 SQL 风格生成提示词,用于创建具有雕刻石材和古董金质感的复杂建筑立体模型。",
"image": "https://cms-assets.youmind.com/media/1788591089116_kxrbhm_HRNiaKKWgAMDb5j.jpg",
"mode": "image",
"prompt": "16:9 select * from artifact_diorama_archives where subject_media = '{argument name=\"media title\" default=\"[media_title]\"}' and base_structure = 'giant_hollowed_out_sphere_cracked_open' and exterior_shell = ( select manuscript_aesthetic, typography from cultural_heritage_db where lore = '{argument name=\"media title\" default=\"[media_title]\"}' format as 'flat_2d_painted_fresco_and_calligraphy_on_outer_curve' ) and interior_payload_strata = array[ (level: 'upper_apex', asset: 'infer_climactic_fortress_or_throne({argument name=\"media title\" default=\"[media_title]\"})'), (level: 'middle_caverns', asset: 'infer_mythological_creatures_and_terrain({argument name=\"media title\" default=\"[media_title]\"})'), (level: 'lower_basin', asset: 'infer_epic_armies_and_waterways({argument name=\"media title\" default=\"[media_title]\"})') ] and materials = 'carved_stone_wood_and_antiqued_gold' and optical_engine = 'macro_photography_depth_of_field';",
"prompt": "创作一张 16:9 的艺术品微缩立体场景图,主题作品为 {argument name=\"media title\" default=\"[media_title]\"}。\n主体底座是一颗巨大、内部掏空并裂开的大球体,剖口展示球体内的世界。\n外壳:依据 {argument name=\"media title\" default=\"[media_title]\"} 的背景设定推导相应文化中的手稿美学与文字风格,把二维平涂壁画和书法绘在球体外侧曲面。\n内部按高度分层:\n— 顶部尖端:根据 {argument name=\"media title\" default=\"[media_title]\"} 推导故事高潮中的堡垒或王座。\n— 中部洞穴:根据 {argument name=\"media title\" default=\"[media_title]\"} 推导神话生物和地形。\n— 底部盆地:根据 {argument name=\"media title\" default=\"[media_title]\"} 推导史诗军队与水道。\n材质使用雕刻石材、木材与做旧黄金。采用微距摄影的景深效果,呈现实体微缩模型的精致质感。",
"category": "game-asset",
"sourceId": "youmind",
"credit": "Gadgetify",
@@ -1613,7 +1613,7 @@
"description": "一个融合了 Irasutoya 插图简约温馨的美学风格与日本政府 Slides 高信息…",
"image": "https://cms-assets.youmind.com/media/1776699414289_t6mebs_HGQQxukbUAA_qc0.jpg",
"mode": "image",
"prompt": "创建一个讲解型 Slides({argument name=\"format\" default=\"ponchi-e diagram\"}),主题为 {argument name=\"theme\" default=\"Momotaro\"},将“Irasutoya”的柔和氛围与“霞关风格 Slides”极高的信息密度完美融合。",
"prompt": "创建一个讲解型 Slides({argument name=\"format\" default=\"ponchi-e diagram\"}),主题为 {argument name=\"theme\" default=\"Momotaro\"},将“Irasutoya”的柔和氛围与“霞关风格 Slides”极高的信息密度完美融合。\n参数说明:ponchi-e diagram 指信息密集的概念示意图,Momotaro 指桃太郎;Slides 指演示幻灯片。",
"sourceId": "youmind",
"credit": "やまもん",
"sourceUrl": "https://x.com/yammamon/status/2045778624092254603"
@@ -2089,7 +2089,7 @@
"description": "一份全面的动漫女英雄角色参考表,包含档案数据、正交三视图、表情变化、服装分解、材质色板…",
"image": "/inspiration-thumbs/youmind/35009.webp",
"mode": "image",
"prompt": "为名为 {argument name=\"character name\" default=\"RU RIO\"} 的动漫风格女性战士创建一张高度详细且专业的角色设计表。布局应在深色背景上划分为不同的区域,使用金色和白色文字。\n\n**左上角(档案):** 标题为 \"CHARACTER PROFILE\" 的页眉,配有带翼徽章。下方是大号衬线字体的名字 \"RU RIO\",副标题为 \"SWORD QUEEN\"。包含数据列表:年龄 (22),身高 (172cm),职业 (Sword Queen),所属势力 (The Royal Court of Elysion),头衔 (Heir to the Radiant Throne),元素属性 (Light),武器 (Regal Longsword \"Lumina Regalia\")。添加一个 \"PERSONALITY\" 部分,描述她冷静且坚定不移,以及一个 \"LIKES/DISLIKES\" 部分。以一句引言结尾:\"A queen's blade shall never waver.\"\n\n**顶部中央(主图):** 角色略微仰视的大型高质量半身肖像。她留着黑色短发,灰色眼睛,身穿带有金色细丝装饰和高领的精致银色板甲。\n\n**右上角(三视图与分析):** 标记为 \"ORTHOGRAPHIC TURNAROUND\" 的区域,展示角色站立的五个全身视图:正面 (FRONT)、3/4 侧面 (3/4 FRONT)、侧面 (SIDE)、3/4 背面 (3/4 BACK) 和背面 (BACK)。其右侧是一个 \"PROPORTIONAL ANALYSIS\" 图表,显示带有水平网格线的正面视图,标记头身比例(Head x 1, Head to Chin 等)。\n\n**中间条带(表情):** 标记为 \"EXPRESSION ANCHORS\" 的一行,包含八个方形面板,展示角色面部特写及不同情绪:中性 (NEUTRAL)、平静 (CALM)、坚定 (DETERMINED)、骄傲 (PROUD)、温柔微笑 (SOFT SMILE)、甜美微笑 (SWEET SMILE)、关切/处理中 (CONCERN/HANDLING) 和战斗呐喊 (BATTLE CRY)。\n\n**左下角(服装):** 标题为 \"WARDROBE & ACCESSORIES BREAKDOWN\" 的部分。它在人体模型上展示全套服装,随后是隔离展示的单品,标签包括:斗篷 (CLOAK)、躯干护甲 (TORSO ARMOR)、护手 (GAUNTLETS)、腿部护甲 (LEG ARMOR)、靴子 (BOOTS),以及各种小配件如腰带和珠宝。\n\n**底部中央(材质与细节):** 两行内容。上一行是 \"MATERIAL PALETTE\",展示银色钢 (SILVER STEEL)、午夜缎面 (MIDNIGHT SATIN)、浆洗上衣 (STARCHED TOP)、皇家皮革 (ROYAL LEATHER) 和镀金饰边 (GILDED TRIM) 的色样。下一行是 \"DETAIL CLOSE-UPS\",展示肩部护肩 (SHOULDER PAULDRON)、胸部装饰 (CHEST ORNAMENT)、大腿绑带与链条 (THIGH STRAP & CHAIN)、大腿竖琴与链条 (THIGH HARP & CHAIN) 以及剑柄细节 (SWORD HILT DETAIL) 的微距镜头。\n\n**右下角(技术):** 一列 \"TECHNICAL NOTES\",列出关于轮廓和面料的要点。在其下方,是一条 \"COLOR SCHEME\" 带,包含菱形色样。最后,是一个 \"RIG & MOVEMENT REFERENCE\" 部分,展示角色的三个小型线框/骨架图。",
"prompt": "为名为 {argument name=\"character name\" default=\"RU RIO\"} 的动漫风格女性战士创建一张高度详细且专业的角色设计表。布局应在深色背景上划分为不同的区域,使用金色和白色文字。\n\n**左上角(档案):** 标题为 \"CHARACTER PROFILE(角色档案)\" 的页眉,配有带翼徽章。下方是大号衬线字体的名字 \"RU RIO\",副标题为 \"SWORD QUEEN(剑之女王)\"。包含数据列表:年龄 (22),身高 (172cm),职业 (Sword Queen(剑之女王)),所属势力 (The Royal Court of Elysion(极乐之境王庭)),头衔 (Heir to the Radiant Throne(辉光王座继承人)),元素属性 (Light(光)),武器 (Regal Longsword(皇家长剑) \"Lumina Regalia(辉光王权)\")。添加一个 \"PERSONALITY(性格)\" 部分,描述她冷静且坚定不移,以及一个 \"LIKES/DISLIKES(喜好与厌恶)\" 部分。以一句引言结尾:\"A queen's blade shall never waver.(女王之刃永不动摇。)\"\n\n**顶部中央(主图):** 角色略微仰视的大型高质量半身肖像。她留着黑色短发,灰色眼睛,身穿带有金色细丝装饰和高领的精致银色板甲。\n\n**右上角(三视图与分析):** 标记为 \"ORTHOGRAPHIC TURNAROUND(正交转面视图)\" 的区域,展示角色站立的五个全身视图:正面 (FRONT)、3/4 侧面 (3/4 FRONT)、侧面 (SIDE)、3/4 背面 (3/4 BACK) 和背面 (BACK)。其右侧是一个 \"PROPORTIONAL ANALYSIS(比例分析)\" 图表,显示带有水平网格线的正面视图,标记头身比例(Head x 1, Head to Chin(一个头高、头顶至下巴) 等)。\n\n**中间条带(表情):** 标记为 \"EXPRESSION ANCHORS(表情参考)\" 的一行,包含八个方形面板,展示角色面部特写及不同情绪:中性 (NEUTRAL)、平静 (CALM)、坚定 (DETERMINED)、骄傲 (PROUD)、温柔微笑 (SOFT SMILE)、甜美微笑 (SWEET SMILE)、关切/处理中 (CONCERN/HANDLING) 和战斗呐喊 (BATTLE CRY)。\n\n**左下角(服装):** 标题为 \"WARDROBE & ACCESSORIES BREAKDOWN(服装与配饰拆解)\" 的部分。它在人体模型上展示全套服装,随后是隔离展示的单品,标签包括:斗篷 (CLOAK)、躯干护甲 (TORSO ARMOR)、护手 (GAUNTLETS)、腿部护甲 (LEG ARMOR)、靴子 (BOOTS),以及各种小配件如腰带和珠宝。\n\n**底部中央(材质与细节):** 两行内容。上一行是 \"MATERIAL PALETTE(材质色板)\",展示银色钢 (SILVER STEEL)、午夜缎面 (MIDNIGHT SATIN)、浆洗上衣 (STARCHED TOP)、皇家皮革 (ROYAL LEATHER) 和镀金饰边 (GILDED TRIM) 的色样。下一行是 \"DETAIL CLOSE-UPS(细节特写)\",展示肩部护肩 (SHOULDER PAULDRON)、胸部装饰 (CHEST ORNAMENT)、大腿绑带与链条 (THIGH STRAP & CHAIN)、大腿竖琴与链条 (THIGH HARP & CHAIN) 以及剑柄细节 (SWORD HILT DETAIL) 的微距镜头。\n\n**右下角(技术):** 一列 \"TECHNICAL NOTES(技术说明)\",列出关于轮廓和面料的要点。在其下方,是一条 \"COLOR SCHEME(配色方案)\" 带,包含菱形色样。最后,是一个 \"RIG & MOVEMENT REFERENCE(绑定与动作参考)\" 部分,展示角色的三个小型线框/骨架图。\n图中指定的英文标题、标签和引言按上述英文原样呈现,括号中的中文供理解。",
"category": "infographic-edu-visual",
"sourceId": "youmind",
"credit": "GenAIPractice",
@@ -2149,7 +2149,7 @@
"description": "一个结构化提示词,用于为营销活动创建 3x3 网格的逼真 UGC 风格面板,包含电影级…",
"image": "https://cms-assets.youmind.com/media/1789199147235_45scrj_HR8Lt6TXYA4qfTB.jpg",
"mode": "image",
"prompt": "使用 GPT Image 2 创建一个 3x3 的全页网格,展示此 {argument name=\"category\" default=\"便利店\"} 的逼真 UGC 风格面板。将视频分为 3 个连续部分。每个面板必须包含一个电影级视觉画面,以及直接印在面板内的清晰制作说明。目标不仅仅是展示产品,而是帮助客户构思购买理由。企业名称为 {argument name=\"business name\" default=\"Zioraa Ventures\"}。将企业名称嵌入背景中。",
"prompt": "使用 GPT Image 2 创建一个 3x3 的全页网格,展示此 {argument name=\"category\" default=\"便利店\"} 的逼真的用户原创内容(UGC)风格分镜面板。将视频分为 3 个连续部分。每个面板必须包含一个电影级视觉画面,以及直接印在面板内的清晰制作说明。目标不仅仅是展示产品,而是帮助客户构思购买理由。企业名称为 {argument name=\"business name\" default=\"Zioraa Ventures\"}。将企业名称嵌入背景中。",
"category": "infographic-edu-visual",
"sourceId": "youmind",
"credit": "Olatunde AI",
@@ -2169,11 +2169,11 @@
},
{
"id": "youmind:34210",
"title": "Technical Product Infographic Overlay",
"description": "Generates a professional technical infograp…",
"title": "产品技术信息图叠加",
"description": "写实产品摄影叠加蓝图线条、尺寸与功能说明。",
"image": "https://cms-assets.youmind.com/media/1789113111185_qdhjmx_HR1UG5dboAEUYF1.jpg",
"mode": "image",
"prompt": "Premium technical infographic of {argument name=\"product\" default=\"[Apple 18 pro ]\"}. Use the reference image only to understand the shape and structure of the object, without copying the same photo, angle, composition, or background. Reinterpret the subject in a new professional and realistic photograph, clean and well-lit, with a suitable and more aesthetic background. Keep the object as a real photo, not an illustration. Add a technical blueprint-style overlay with white lines, arrows, dimensions, labels, and small diagrams of parts, materials, measurements, and functionality. Clear, elegant, and informative composition. Include a sketch box in the upper left corner with the title \"{argument name=\"title\" default=\"[Apple 18 pro]\"}",
"prompt": "为 {argument name=\"product\" default=\"[Apple 18 pro ]\"} 制作高端技术信息图。参考图仅用于理解物体形状和结构,不复制原照片、角度、构图或背景。\n以全新的专业写实摄影重新表现主体,画面干净、布光良好,背景适合产品且更美观。物体保持真实照片质感,不画成插画。\n叠加技术蓝图风格的白色线条、箭头、尺寸标注、标签和小型示意图,说明零件、材质、测量数据与功能。构图清晰、优雅、信息充分。\n左上角放一个草图框,标题为“{argument name=\"title\" default=\"[Apple 18 pro]\"}”。",
"category": "infographic-edu-visual",
"sourceId": "youmind",
"credit": "Al-Shamus",
@@ -2181,11 +2181,11 @@
},
{
"id": "youmind:34145",
"title": "Research Paper Academic Poster",
"description": "A prompt to transform an attached research …",
"title": "研究论文会议海报",
"description": "根据会议海报规范,将论文整理成学术展示海报。",
"image": "/inspiration-thumbs/youmind/34145.webp",
"mode": "image",
"prompt": "Research the poster regulations for presentation at the {argument name=\"conference name\" default=\"2026 Neuroscience Conference\"} and transform the attached paper into a poster accordingly.",
"prompt": "查询 {argument name=\"conference name\" default=\"2026 Neuroscience Conference\"} 的报告海报规范,并按照这些要求,将附上的论文制作成学术海报。",
"category": "infographic-edu-visual",
"sourceId": "youmind",
"credit": "Daichi Konno / 紺野 大地",
@@ -2193,11 +2193,11 @@
},
{
"id": "youmind:34148",
"title": "3D Diagrams and Visual Layouts",
"description": "A comprehensive prompt setup to generate cl…",
"title": "三维图解与视觉排版",
"description": "比较视觉方案,以贴合主题的三维物件呈现信息关系。",
"image": "https://cms-assets.youmind.com/media/1789029059595_eeotu5_HRz-Q5LasAAI4Qh.png",
"mode": "image",
"prompt": "You are an information editor, diagram designer, and 3D art director.\n- Compare 3 visual proposals matching the content, and adopt the most intuitive option.\n- Explain using objects or materials specific to the subject. Use books, bamboo slips, or paper for classical literature; parts or assembly for manufacturing.\n- Elegant matte materials, soft lighting, and natural depth. Use 3D representations to convey sequence, relationships, and changes.",
"prompt": "你是一位信息编辑、图解设计师和 3D 美术指导。\n- 对比 3 种符合内容的视觉方案,采用最直观的一种。\n- 使用与主题相关的物品或材料进行说明。例如古典文学使用书籍、竹简或纸张,制造业使用零件或装配过程。\n- 使用优雅的哑光材质、柔和光线与自然的纵深感。通过 3D 表现传达顺序、关系和变化。",
"category": "infographic-edu-visual",
"sourceId": "youmind",
"credit": "あきらパパ【生成AI活用エンジニア&3児のパパ】",
@@ -2589,11 +2589,11 @@
},
{
"id": "youmind:34219",
"title": "Hand-drawn travel journal illustration",
"description": "A detailed prompt to transform a reference …",
"title": "手绘旅行日记插画",
"description": "将旅行照片转为彩铅水彩速写,保留原场景与透视。",
"image": "/inspiration-thumbs/youmind/34219.webp",
"mode": "image",
"prompt": "Transform the reference photograph into a delicate {argument name=\"style\" default=\"hand-drawn travel journal illustration\"} while preserving the original composition, architecture, people, trees, grass, road, and overall perspective. Use a traditional colored-pencil and watercolor sketch aesthetic on warm, slightly aged cream paper. Keep the buildings recognizable but simplify them into expressive hand-drawn shapes, with visible pencil strokes, loose watercolor washes, subtle paper grain, imperfect outlines, and gentle cross-hatching. Preserve the peaceful {argument name=\"atmosphere\" default=\"rainy-day\"} atmosphere, soft overcast sky, warm beige and muted buildings, fresh green lawn, scattered people walking with umbrellas, wet pavement, trees, benches, puddles, and distant cars. Use a muted vintage travel-sketch palette with natural imperfections and understated colors. Place the illustration in the lower portion of the page with generous cream-colored negative space around it. Add elegant handwritten typography above: ‘{argument name=\"heading\" default=\"Rainy Days\"}’, and below: — Quiet moments —. Minimal, nostalgic, artistic travel magazine aesthetic, analog photography transformed into a personal sketchbook memory, sophisticated and authentic, no photorealism.",
"prompt": "将参考照片转化为精致的 {argument name=\"style\" default=\"hand-drawn travel journal illustration\"}(手绘旅行日记插画),保留原有构图、建筑、人物、树木、草地、道路和整体透视。\n采用传统彩铅与水彩速写美学,画在温暖、略微做旧的奶油色纸上。建筑仍须可辨认,但简化成富有表现力的手绘形状;保留可见铅笔笔触、松散水彩晕染、细微纸纹、不完美轮廓和轻柔交叉排线。\n保留安静的 {argument name=\"atmosphere\" default=\"rainy-day\"}(雨天)氛围:柔和阴天、暖米色及低饱和建筑、清新绿草地、零散撑伞行人、湿路面、树木、长椅、水洼和远处车辆。采用低饱和复古旅行速写配色,色彩含蓄,带自然瑕疵。\n插画放在页面下部,四周留出充足奶油色空白。上方添加优雅手写标题“{argument name=\"heading\" default=\"Rainy Days\"}”(雨天),下方写“— Quiet moments —”(静谧时刻)。\n整体简约、怀旧,具有艺术旅行杂志美感,把胶片摄影转化为个人速写本中的记忆,精致而真诚,不采用照片级写实风格。",
"category": "comic-storyboard",
"sourceId": "youmind",
"credit": "Selina",
@@ -2805,8 +2805,8 @@
},
{
"id": "youmind:35679",
"title": "GPT Image Perfume Bottle Prompt",
"description": "A detailed prompt for generating a realisti…",
"title": "GPT Image 香水瓶微缩景观",
"description": "透明玻璃香水瓶内封存苔藓山谷、盆景与瀑布。",
"image": "/inspiration-thumbs/youmind/35679.webp",
"mode": "image",
"prompt": "一个巨大的、圆润的浅绿色透明玻璃香水瓶,内部封存着微型苔藓山谷、盆景树、岩石和小瀑布。放置在覆盖着水的粗野主义原始混凝土空间中;冷色调日光从左上方通过建筑开口射入,而暖色调夕阳光从右后方形成轮廓光。玻璃展现出真实的折射、焦散、微小水滴和高光畸变;水面产生自然反射。低角度产品摄影,主体略微偏右,大面积留白,真实的光学景深,高端香水广告品质,无文字,无 logo,无塑料 CGI 外观。",
@@ -3037,7 +3037,7 @@
"description": "一份详细的提示词,用于使用上传的参考图像作为身份源,生成包含恰好 10 个帧(5 个面…",
"image": "/inspiration-thumbs/youmind/36030.webp",
"mode": "image",
"prompt": "使用上传的 REFERENCE IMAGE(参考图像)作为 MAIN SUBJECT(主要主体)的唯一身份参考,创建一份高端专业的角色参考表。\n\n重要事项:\n最终图像必须包含 EXACTLY 10 frames/panels(恰好 10 个帧/面板)。\n不要添加额外的帧。\n不要移除任何帧。\n不要更改面板排列。\n\n使用以下 EXACT 2-ROW, 10-FRAME layout(精确的 2 行 10 帧布局):\n\nTOP ROW = 5 FACE / HEAD-AND-SHOULERS VIEWS(顶行 = 5 个面部 / 头肩视图)\nBOTTOM ROW = 5 FULL-BODY VIEWS(底行 = 5 个全身视图)\n\n构图、帧数、姿势序列和相机角度必须完全按照以下指定内容保持不变。\n\n==================================================\nREFERENCE & IDENTITY LOCK(参考与身份锁定)\n==================================================\n\n将上传的参考图像用作 MAIN SUBJECT'S identity(主要主体身份)的唯一真实来源。\n\n保留人物的确切特征:\n- Facial identity(面部身份)\n- Facial structure(面部结构)\n- Skin tone(肤色)\n- Eye shape and natural eye color(眼形和自然瞳色)\n- Eyebrows(眉毛)\n- Nose(鼻子)\n- Lips(嘴唇)\n- Jawline(下颌线)\n- Cheek structure(脸颊结构)\n- Hairstyle(发型)\n- Hairline(发际线)\n- Hair color(发色)\n- Hair texture(发质)\n- Hair length(头发长度)\n- Age appearance(年龄外观)\n- Natural facial features(自然面部特征)\n- Body proportions(身体比例)\n- Physique(体格)\n- Overall recognizable appearance(整体可识别外观)\n\n参考图像可以是 MALE(男性)或 FEMALE(女性)。\n\n如果参考是男性,保持主体为男性。\n如果参考是女性,保持主体为女性。\n\n不要改变人物身份。\n不要创建看起来不同的版本。\n不要美化或修改面部结构。\n\n==================================================\nEXACT FINAL LAYOUT — 10 FRAMES(精确最终布局 — 10 帧)\n==================================================\n\nROW 1 — FACE REFERENCE(第 1 行 — 面部参考)\nExactly 5 frames(恰好 5 帧):\n\nFRAME 1:\nFRONT VIEW(正面视图)\n- Straight-on face(正对镜头的脸)\n- Head facing directly toward camera(头部直接面向相机)\n- Neutral expression(中性表情)\n- Head and shoulders visible(可见头部和肩膀)\n\nFRAME 2:\n3/4 LEFT VIEW(左 3/4 视图)\n- Head turned approximately 45 degrees to the subject's LEFT(头部向主体的左侧旋转约 45 度)\n- Face clearly visible(面部清晰可见)\n- Head and shoulders visible(可见头部和肩膀)\n\nFRAME 3:\nLEFT PROFILE(左侧面轮廓)\n- Exact left-side profile(精确的左侧轮廓)\n- Approximately 90-degree rotation(约 90 度旋转)\n- Nose, lips, chin, jawline and hair silhouette clearly visible(鼻子、嘴唇、下巴、下颌线和头发轮廓清晰可见)\n\nFRAME 4:\n3/4 RIGHT VIEW(右 3/4 视图)\n- Head turned approximately 45 degrees to the subject's RIGHT(头部向主体的右侧旋转约 45 度)\n- Face clearly visible(面部清晰可见)\n- Head and shoulders visible(可见头部和肩膀)\n\nFRAME 5:\nRIGHT PROFILE(右侧面轮廓)\n- Exact right-side profile(精确的右侧轮廓)\n- Approximately 90-degree rotation(约 90 度旋转)\n- Complete facial silhouette clearly visible(完整的面部轮廓清晰可见)\n\nTOP ROW ORDER MUST BE(顶行顺序必须为):\n\nFRONT | 3/4 LEFT | LEFT PROFILE | 3/4 RIGHT | RIGHT PROFILE\n\n==================================================\nROW 2 — FULL BODY REFERENCE(第 2 行 — 全身参考)\n==================================================\n\nExactly 5 frames(恰好 5 帧):\n\nFRAME 6:\nFRONT FULL-BODY VIEW(正面全身视图)\n- Subject standing naturally(主体自然站立)\n- Facing directly toward camera(直接面向相机)\n- Entire body visible from head to feet(从头顶到脚底全身可见)\n- Arms naturally relaxed beside the body(手臂自然放松垂于身体两侧)\n- Feet visible(脚部可见)\n\nFRAME 7:\n3/4 LEFT FULL-BODY VIEW(左 3/4 全身视图)\n- Body rotated approximately 45 degrees to the subject's LEFT(身体向主体的左侧旋转约 45 度)\n- Entire body visible(全身可见)\n- Natural standing posture(自然站姿)\n- Feet visible(脚部可见)\n\nFRAME 8:\nLEFT PROFILE FULL-BODY VIEW(左侧面全身视图)\n- Exact left-side profile(精确的左侧轮廓)\n- Body rotated approximately 90 degrees(身体旋转约 90 度)\n- Entire body visible from head to feet(从头顶到脚底全身可见)\n\nFRAME 9:\n3/4 RIGHT FULL-BODY VIEW(右 3/4 全身视图)\n- Body rotated approximately 45 degrees to the subject's RIGHT(身体向主体的右侧旋转约 45 度)\n- Entire body visible(全身可见)\n- Natural standing postureLine truncated
"prompt": "使用上传的 参考图像作为 主要主体的唯一身份参考,创建一份高端专业的角色参考表。\n\n重要事项:\n最终图像必须包含 恰好 10 个帧/面板。\n不要添加额外的帧。\n不要移除任何帧。\n不要更改面板排列。\n\n使用以下 精确的 2 行 10 帧布局:\n\n顶行 = 5 个面部 / 头肩视图\n底行 = 5 个全身视图\n\n构图、帧数、姿势序列和相机角度必须完全按照以下指定内容保持不变。\n\n==================================================\n参考与身份锁定\n==================================================\n\n将上传的参考图像用作 主要主体身份的唯一真实来源。\n\n保留人物的确切特征:\n- 面部身份\n- 面部结构\n- 肤色\n- 眼形和自然瞳色\n- 眉毛\n- 鼻子\n- 嘴唇\n- 下颌线\n- 脸颊结构\n- 发型\n- 发际线\n- 发色\n- 发质\n- 头发长度\n- 年龄外观\n- 自然面部特征\n- 身体比例\n- 体格\n- 整体可识别外观\n\n参考图像可以是 男性或 女性。\n\n如果参考是男性,保持主体为男性。\n如果参考是女性,保持主体为女性。\n\n不要改变人物身份。\n不要创建看起来不同的版本。\n不要美化或修改面部结构。\n\n==================================================\n精确最终布局 — 10 帧\n==================================================\n\n第 1 行 — 面部参考\n恰好 5 帧:\n\n第 1 帧:\n正面视图\n- 正对镜头的脸\n- 头部直接面向相机\n- 中性表情\n- 可见头部和肩膀\n\n第 2 帧:\n左 3/4 视图\n- 头部向主体的左侧旋转约 45 度\n- 面部清晰可见\n- 可见头部和肩膀\n\n第 3 帧:\n左侧面轮廓\n- 精确的左侧轮廓\n- 约 90 度旋转\n- 鼻子、嘴唇、下巴、下颌线和头发轮廓清晰可见\n\n第 4 帧:\n右 3/4 视图\n- 头部向主体的右侧旋转约 45 度\n- 面部清晰可见\n- 可见头部和肩膀\n\n第 5 帧:\n右侧面轮廓\n- 精确的右侧轮廓\n- 约 90 度旋转\n- 完整的面部轮廓清晰可见\n\n顶行顺序必须为:\n\nFRONT(正面) | 3/4 LEFT(左 3/4) | LEFT PROFILE(左侧面) | 3/4 RIGHT(右 3/4) | RIGHT PROFILE(右侧面)\n\n==================================================\n第 2 行 — 全身参考\n==================================================\n\n恰好 5 帧:\n\n第 6 帧:\n正面全身视图\n- 主体自然站立\n- 直接面向相机\n- 从头顶到脚底全身可见\n- 手臂自然放松垂于身体两侧\n- 脚部可见\n\n第 7 帧:\n左 3/4 全身视图\n- 身体向主体的左侧旋转约 45 度\n- 全身可见\n- 自然站姿\n- 脚部可见\n\n第 8 帧:\n左侧面全身视图\n- 精确的左侧轮廓\n- 身体旋转约 90 度\n- 从头顶到脚底全身可见\n\n第 9 帧:\n右 3/4 全身视图\n- 身体向主体的右侧旋转约 45 度\n- 全身可见\n- 自然站姿\n- 脚部可见\n\n第 10 帧:\n背面全身视图\n- 主体完全背对相机\n- 背部完全可见\n- 从头顶到脚底全身可见\n- 从背面可见头发\n- 自然站姿\n\n底行顺序必须为:\n\nFRONT(正面) | 3/4 LEFT(左 3/4) | LEFT PROFILE(左侧面) | 3/4 RIGHT(右 3/4) | BACK(背面)\n\n==================================================\n关键一致性\n==================================================\n\n所有 10 帧必须展示完全相同的人。\n\n保持相同的:\n- 面部\n- 头发\n- 发际线\n- 发色\n- 面部比例\n- 身体比例\n- 身高\n- 体格\n- 肤色\n- 年龄外观\n- 服装\n- 配饰\n\n这个人不能看起来像 10 个不同的人。\n\n面部身份必须在每一帧之间保持一致。\n\n身体比例必须在每个全身帧之间保持一致。\n\n==================================================\n服装\n==================================================\n\n使用一套简单、干净、合身的服装,适合专业的角色/模型参考表。\n\n完全相同的服装必须出现在所有 10 帧中。\n\n不要在面板之间更换服装。\n\n不要在面板之间更换发型。\n\n不要在面板之间更换配饰。\n\n如果上传的参考具有重要的可识别发型或外观,请予以保留。\n\n==================================================\n背景与呈现\n==================================================\n\n干净专业的浅灰色/白色工作室背景。\n\n极简环境。\n\n无风景。\n\n无道具。\n\n无戏剧性背景。\n\n无不必要物体。\n\n所有 10 帧应呈现为一张专业拍摄的角色参考表。\n\n在每个帧中使用一致的影棚灯光。\n\n柔和、中性、均匀分布的光线。\n\n极少阴影。\n\n==================================================\n相机一致性\n==================================================\n\n使用一致的专业影棚摄影。\n\n面部帧:\n头肩取景。\n\n全身帧:\n从头到脚的取景,全身完全可见。\n\n保持一致的相机高度、焦Line truncated
"category": "game-asset",
"sourceId": "youmind",
"credit": "M. Asif",
File diff suppressed because it is too large. Load diff
+10 -1
View File
@@ -13,6 +13,7 @@
*/
import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, unlinkSync, writeFileSync } from "node:fs";
import { dirname, join, resolve } from "node:path";
import { localizeInspirationEntries } from "./inspiration-localization.mjs";
const WEB_DIR = resolve(import.meta.dir, "..");
const PUBLIC_DIR = join(WEB_DIR, "public", "inspirations");
@@ -487,6 +488,14 @@ async function main() {
const selected = SOURCE_PIPELINES.filter((pipeline) => !options.only || options.only === pipeline.name);
if (!selected.length) throw new Error(`--only 不认识的来源: ${options.only}`);
const translations = JSON.parse(readFileSync(join(WEB_DIR, "scripts", "data", "inspiration-prompts-zh.json"), "utf8"));
const localizedSources = new Map();
// 先检查所有选中来源的中文覆盖,再下载封面或写目录,避免半批更新后才发现缺译。
for (const pipeline of selected) {
const loaded = await pipeline.load(options);
localizedSources.set(pipeline.name, { ...loaded, entries: localizeInspirationEntries(loaded.entries, translations) });
}
mkdirSync(PUBLIC_DIR, { recursive: true });
const revisions = {};
const counts = {};
@@ -508,7 +517,7 @@ async function main() {
continue;
}
const loaded = await pipeline.load(options);
const loaded = localizedSources.get(pipeline.name);
const { entries } = loaded;
if (!entries.length) throw new Error(`${pipeline.name} 没有解析出任何条目`);
revisions[pipeline.name] = loaded.revision;
+20
View File
@@ -0,0 +1,20 @@
import { createHash } from "node:crypto";
/** 原文变更必须重新确认译文,不能只按 id 套用已过期的中文。 */
export function localizeInspirationEntries(entries, translations) {
return entries.map(({ promptZh, ...entry }) => {
const translation = translations[entry.id];
const sourceHash = createHash("sha256").update(entry.prompt).digest("hex");
if (!translation || translation.sourceHash !== sourceHash) {
throw new Error(`灵感缺少匹配当前原文的中文正文:${entry.id}。请更新 scripts/data/inspiration-prompts-zh.json 后再导入。`);
}
const prompt = translation.prompt?.trim();
if (!prompt || !/[㐀-䶿一-鿿]/.test(prompt)) throw new Error(`灵感中文正文无效:${entry.id}`);
return {
...entry,
...(translation?.title ? { title: translation.title } : {}),
...(translation?.description ? { description: translation.description } : {}),
prompt,
};
});
}
+4 -4
View File
@@ -32,7 +32,7 @@ export const inspirationSources: Record<InspirationSourceId, InspirationSourceIn
repository: "https://github.com/LearnPrompt/awesome-seedance",
revision: HIGHLIGHT_REVISIONS.seedance,
license: "CC BY 4.0",
notice: "视频提示词与封面来自 awesome-seedance(数据每日同步自 goodcase.ai),按 CC BY 4.0 署名使用。封面为原案例画面,不代表本平台生成结果。",
notice: "视频提示词与封面来自 awesome-seedance(数据每日同步自 goodcase.ai),提示词经中文翻译改编,按 CC BY 4.0 署名使用。封面为原案例画面,不代表本平台生成结果。",
},
haohaoxue: {
label: "好好学 AI · 图片提示词",
@@ -40,7 +40,7 @@ export const inspirationSources: Record<InspirationSourceId, InspirationSourceIn
repository: "https://www.haohaoxue.com/prompts/",
revision: HIGHLIGHT_REVISIONS.haohaoxue,
license: "站点公开数据 · robots.txt 允许抓取",
notice: "图片提示词中英双语正文与封面来自好好学 AI 提示词库(haohaoxue.com),该站 robots.txt 明确允许包括 ClaudeBot 在内的抓取。作者署名取数据内置的 author 字段。封面为原提示词示例图,不代表本平台生成结果。",
notice: "图片提示词中文正文与封面来自好好学 AI 提示词库(haohaoxue.com),该站 robots.txt 明确允许包括 ClaudeBot 在内的抓取。作者署名取数据内置的 author 字段。封面为原提示词示例图,不代表本平台生成结果。",
},
youmind: {
label: "YouMind 提示词库 · CC BY 4.0",
@@ -48,7 +48,7 @@ export const inspirationSources: Record<InspirationSourceId, InspirationSourceIn
repository: "https://github.com/YouMind-OpenLab/awesome-nano-banana-pro-prompts",
revision: HIGHLIGHT_REVISIONS.youmind,
license: "CC BY 4.0",
notice: "图片提示词与配图来自 YouMind OpenLab 的 awesome-nano-banana-pro-prompts 与 awesome-gpt-image-2 两个姊妹库(Nano Banana Pro / GPT Image 2 中文提示词),按 CC BY 4.0 署名使用。作者署名取条目内置的 author 字段。配图为原提示词的生成示例,不代表本平台生成结果。",
notice: "图片提示词与配图来自 YouMind OpenLab 的 awesome-nano-banana-pro-prompts 与 awesome-gpt-image-2 两个姊妹库(Nano Banana Pro / GPT Image 2 中文提示词),部分提示词经中文翻译改编,按 CC BY 4.0 署名使用。作者署名取条目内置的 author 字段。配图为原提示词的生成示例,不代表本平台生成结果。",
},
};
@@ -68,7 +68,7 @@ export type CreationInspiration = {
image: string;
mode: CreationMode;
prompt: string;
/** 中文正文,双语来源才有(好好学 AI 的中英双语条目)。 */
/** 自定义双语条目的中文正文;内置目录已将中文统一存入 prompt。 */
promptZh?: string;
/** 上游分类 id,标签表见 public/inspirations/manifest.json。 */
category?: string;
@@ -18,6 +18,7 @@ import { ArrowUp, ChevronLeft, ChevronRight } from "lucide-react";
import { useReducedMotion } from "motion/react";
import { catalogIdOf, type CreationInspiration } from "@/lib/inspirations/catalog";
import { fillablePrompt } from "@/lib/inspirations/resolve";
import { loadGalleryPool } from "@/services/inspiration-catalog";
import type { CreationMode } from "./creation-types";
import { createGalleryWheelGesture } from "./creation-gallery-gesture";
@@ -228,7 +229,7 @@ export function CreationInspirationTunnel({ mode, onStartPrompt }: { mode: Creat
tabIndex={-1}
className={`creation-tunnel-card ${depth === 0 ? "is-active" : ""} ${readyIds.has(id) ? "is-ready" : ""}`}
style={style}
onClick={() => onStartPrompt(inspiration.mode, inspiration.prompt)}
onClick={() => onStartPrompt(inspiration.mode, fillablePrompt(inspiration))}
>
<img
src={inspiration.image}
+48
View File
@@ -0,0 +1,48 @@
import { describe, expect, test } from "bun:test";
import { createHash } from "node:crypto";
import { readFileSync } from "node:fs";
import { localizeInspirationEntries } from "../scripts/inspiration-localization.mjs";
const hash = (text: string) => createHash("sha256").update(text).digest("hex");
const original = { id: "seedance:sample", prompt: "A slow tracking shot, 16:9, 10 seconds.", image: "/cover.webp", videoUrl: "https://example.com/video.mp4", sourceUrl: "https://example.com/source" };
describe("Chinese inspiration catalogs", () => {
test("replaces the complete prompt while preserving media, identity and attribution", () => {
const translated = "缓慢跟拍镜头,16:9,10 秒。";
const [entry] = localizeInspirationEntries([original], { [original.id]: { sourceHash: hash(original.prompt), prompt: translated, title: "缓慢跟拍", description: "横屏十秒镜头" } });
expect(entry).toEqual({ ...original, prompt: translated, title: "缓慢跟拍", description: "横屏十秒镜头" });
expect(original.prompt).toStartWith("A slow");
});
test("uses the verified translation even when upstream supplies another Chinese body", () => {
const [entry] = localizeInspirationEntries([{ ...original, promptZh: "原站提供的旧中文提示词。" }], { [original.id]: { sourceHash: hash(original.prompt), prompt: "已校对的完整中文提示词。" } });
expect(entry.prompt).toBe("已校对的完整中文提示词。");
expect(entry.promptZh).toBeUndefined();
});
test("upstream Chinese cannot bypass missing or stale translation approval", () => {
for (const records of [{}, { [original.id]: { sourceHash: hash("old prompt"), prompt: "旧翻译" } }]) {
expect(() => localizeInspirationEntries([{ ...original, promptZh: "旧中文" }], records)).toThrow();
}
});
test("rejects missing, outdated and non-Chinese translations instead of restoring English", () => {
for (const records of [{}, { [original.id]: { sourceHash: hash("old prompt"), prompt: "旧翻译" } }, { [original.id]: { sourceHash: hash(original.prompt), prompt: "Still English" } }]) {
expect(() => localizeInspirationEntries([original], records)).toThrow();
}
});
test("every shipped catalog prompt is Chinese and the gallery uses the same complete text", () => {
const all = new Map<string, string>();
for (const name of ["seedance", "haohaoxue", "youmind"]) {
const pack = JSON.parse(readFileSync(new URL(`../public/inspirations/${name}.json`, import.meta.url), "utf8"));
for (const item of pack.entries) {
expect(item.prompt).toMatch(/[\u3400-\u9fff]/);
expect(item.promptZh).toBeUndefined();
all.set(item.id, item.prompt);
}
}
const gallery = JSON.parse(readFileSync(new URL("../public/inspirations/gallery-pool.json", import.meta.url), "utf8"));
for (const item of gallery.entries) expect(item.prompt).toBe(all.get(item.id));
});
});