@tomako/tools-runtime 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -1
- package/src/components/tools/engine/package-widget-runtime.tsx +5 -1
- package/src/components/tools/engine/task-recovery.test.ts +65 -0
- package/src/components/tools/engine/task-recovery.ts +109 -0
- package/src/components/tools/engine/use-legacy-llm-task.ts +16 -3
- package/src/components/tools/engine/use-tool-task.ts +77 -53
- package/src/features/tools/app-icon-resizer/app-icon-resizer.spec.ts +1 -1
- package/src/features/tools/app-store-screenshot-generator/app-store-screenshot-generator.container.tsx +6 -8
- package/src/features/tools/app-store-screenshot-generator/app-store-screenshot-generator.spec.ts +1 -1
- package/src/features/tools/app-store-screenshot-generator/widget/app-store-screenshot-generator.tsx +44 -6
- package/src/features/tools/app-store-screenshot-generator/widget/generation.test.ts +126 -0
- package/src/features/tools/app-store-screenshot-generator/widget/generation.ts +52 -14
- package/src/features/tools/cold-start-channel-selector/cold-start-channel-selector.spec.ts +1 -1
- package/src/features/tools/cold-start-channel-selector/widget/cold-start-channel-selector.tsx +45 -16
- package/src/features/tools/competitor-analysis/competitor-analysis.container.tsx +31 -26
- package/src/features/tools/competitor-analysis/competitor-analysis.spec.ts +1 -1
- package/src/features/tools/competitor-analysis/widget/competitor-analysis.tsx +47 -16
- package/src/features/tools/disclaimer-generator/disclaimer-generator.package.ts +4 -4
- package/src/features/tools/email-template-generator/email-template-generator.container.tsx +45 -173
- package/src/features/tools/email-template-generator/email-template-generator.spec.ts +1 -1
- package/src/features/tools/email-template-generator/widget/email-template-generator.tsx +37 -4
- package/src/features/tools/package/to-tool-module.ts +15 -0
- package/src/features/tools/product-name-generator/product-name-generator.spec.ts +1 -1
- package/src/features/tools/product-name-generator/widget/product-name-generator.tsx +60 -27
- package/src/features/tools/product-poster-generator/product-poster-generator.spec.ts +1 -1
- package/src/features/tools/product-poster-generator/widget/constants.ts +3 -1
- package/src/features/tools/product-poster-generator/widget/helpers.test.ts +51 -0
- package/src/features/tools/product-poster-generator/widget/helpers.ts +27 -0
- package/src/features/tools/product-poster-generator/widget/product-poster-generator.tsx +112 -12
- package/src/features/tools/slogan-generator/slogan-generator.package.ts +101 -29
- package/src/features/tools/twitter-gif-downloader/twitter-gif-downloader.container.tsx +2 -3
- package/src/features/tools/twitter-gif-downloader/twitter-gif-downloader.spec.ts +1 -1
- package/src/i18n/messages/en/tools/app-icon-resizer.ts +1 -1
- package/src/i18n/messages/en/tools/app-store-screenshot-generator.ts +3 -3
- package/src/i18n/messages/en/tools/cold-start-channel-selector.ts +4 -4
- package/src/i18n/messages/en/tools/competitor-analysis.ts +14 -10
- package/src/i18n/messages/en/tools/email-template-generator.ts +13 -13
- package/src/i18n/messages/en/tools/product-poster-generator.ts +3 -2
- package/src/i18n/messages/en/tools/twitter-gif-downloader.ts +1 -1
- package/src/i18n/messages/zh/tools/app-store-screenshot-generator.ts +4 -4
- package/src/i18n/messages/zh/tools/cold-start-channel-selector.ts +2 -2
- package/src/i18n/messages/zh/tools/competitor-analysis.ts +14 -10
- package/src/i18n/messages/zh/tools/email-template-generator.ts +12 -12
- package/src/i18n/messages/zh/tools/product-poster-generator.ts +2 -1
- package/src/i18n/messages/zh/tools/twitter-gif-downloader.ts +1 -1
- package/src/i18n/messages/zh-tw/tools/app-store-screenshot-generator.ts +44 -44
- package/src/i18n/messages/zh-tw/tools/cold-start-channel-selector.ts +105 -105
- package/src/i18n/messages/zh-tw/tools/competitor-analysis.ts +44 -40
- package/src/i18n/messages/zh-tw/tools/email-template-generator.ts +112 -112
- package/src/i18n/messages/zh-tw/tools/product-name-generator.ts +92 -92
- package/src/i18n/messages/zh-tw/tools/product-poster-generator.ts +74 -73
- package/src/i18n/messages/zh-tw/tools/twitter-gif-downloader.ts +48 -48
- package/src/lib/tools/cold-start-channel-selector-schema.test.ts +39 -0
- package/src/lib/tools/cold-start-channel-selector-schema.ts +8 -4
- package/src/lib/tools/competitor-analysis-schema.test.ts +69 -0
- package/src/lib/tools/competitor-analysis-schema.ts +53 -5
- package/src/lib/tools/ops-catalog.ts +10 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const emailTemplateGenerator = {
|
|
2
2
|
meta: {
|
|
3
|
-
title: "Email Template Generator",
|
|
4
|
-
description: "Turn marketing or
|
|
3
|
+
title: "MJML Email Template Generator",
|
|
4
|
+
description: "Turn a marketing or transactional email brief into an MJML-first package with HTML preview, plain text, variables, review notes, and developer handoff.",
|
|
5
5
|
intro: "Convert a rough email brief into a previewable, revisable, export-ready MJML template package for campaigns, verification codes, receipts, subscription confirmations, and account notifications.",
|
|
6
6
|
category: "Marketing tools",
|
|
7
7
|
keywords: [
|
|
@@ -16,9 +16,9 @@ const emailTemplateGenerator = {
|
|
|
16
16
|
},
|
|
17
17
|
guide: {
|
|
18
18
|
heroImageAlt: "Visual of a rough email brief becoming MJML, HTML, plain text, variables, and an export bundle.",
|
|
19
|
-
workspaceHeading: "
|
|
19
|
+
workspaceHeading: "MJML Email Template Generator",
|
|
20
20
|
workspaceHint:
|
|
21
|
-
"Describe the email goal, audience, scenario, and brand tone. The
|
|
21
|
+
"Describe the email goal, audience, scenario, and brand tone. The generation workflow returns a structured MJML-first package you can preview, revise, copy, or export.",
|
|
22
22
|
workspaceBadge: "MJML package",
|
|
23
23
|
outputs: "What You Get",
|
|
24
24
|
outputsIntro:
|
|
@@ -45,8 +45,8 @@ const emailTemplateGenerator = {
|
|
|
45
45
|
body: "See compliance, accessibility, rendering, and missing-information notes before handing the template to development.",
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
|
-
title: "
|
|
49
|
-
body: "After generation, describe the exact wording or module change and regenerate a new structured result
|
|
48
|
+
title: "Guided revision loop",
|
|
49
|
+
body: "After generation, describe the exact wording or module change and regenerate a new structured result.",
|
|
50
50
|
},
|
|
51
51
|
],
|
|
52
52
|
valueVisualAlt: "Visual of an email template package with MJML, HTML, variables, and developer handoff notes.",
|
|
@@ -72,7 +72,7 @@ const emailTemplateGenerator = {
|
|
|
72
72
|
},
|
|
73
73
|
{
|
|
74
74
|
title: "Fast Iteration",
|
|
75
|
-
body: "A rough brief can become a first package quickly, then the
|
|
75
|
+
body: "A rough brief can become a first package quickly, then the generation workflow can revise structure, wording, and sections from follow-up instructions.",
|
|
76
76
|
},
|
|
77
77
|
{
|
|
78
78
|
title: "Useful Preview",
|
|
@@ -103,7 +103,7 @@ const emailTemplateGenerator = {
|
|
|
103
103
|
title: "How To Recover",
|
|
104
104
|
items: [
|
|
105
105
|
"If the result is too generic, add real product value, user segment, offer, CTA, objections, and brand examples.",
|
|
106
|
-
"If the template feels too promotional, switch to a transactional scenario or ask the
|
|
106
|
+
"If the template feels too promotional, switch to a transactional scenario or ask for the sales language to be removed.",
|
|
107
107
|
"If a merge field or link is missing, add the required variable name and regenerate through the revision box.",
|
|
108
108
|
],
|
|
109
109
|
},
|
|
@@ -153,7 +153,7 @@ const emailTemplateGenerator = {
|
|
|
153
153
|
{
|
|
154
154
|
question: "Can I edit the result?",
|
|
155
155
|
answer:
|
|
156
|
-
"Yes. You can inspect sections and
|
|
156
|
+
"Yes. You can inspect sections and submit revision instructions. The next version is returned as a new structured result.",
|
|
157
157
|
},
|
|
158
158
|
{
|
|
159
159
|
question: "Is the generated HTML ready to send?",
|
|
@@ -207,7 +207,7 @@ const emailTemplateGenerator = {
|
|
|
207
207
|
emptyTitle: "Your generated package will appear here",
|
|
208
208
|
emptyHint:
|
|
209
209
|
"The result includes HTML preview, MJML source, HTML, plain text, variables, review notes, and export actions.",
|
|
210
|
-
runningTitle: "
|
|
210
|
+
runningTitle: "Your template package is being generated",
|
|
211
211
|
runningHint:
|
|
212
212
|
"It is writing MJML, matching HTML, plain text, variables, and review notes. Short result fetch delays are normal.",
|
|
213
213
|
previewInput: "Input",
|
|
@@ -248,7 +248,7 @@ const emailTemplateGenerator = {
|
|
|
248
248
|
missing: "Missing information",
|
|
249
249
|
empty: "No items returned.",
|
|
250
250
|
},
|
|
251
|
-
revisionLabel: "
|
|
251
|
+
revisionLabel: "Revise the result",
|
|
252
252
|
revisionHint: "Use a specific change request",
|
|
253
253
|
revisionPlaceholder:
|
|
254
254
|
"Example: Make the hero shorter, change the CTA to book a demo, and add {{calendar_url}} as a variable.",
|
|
@@ -262,12 +262,12 @@ const emailTemplateGenerator = {
|
|
|
262
262
|
},
|
|
263
263
|
errors: {
|
|
264
264
|
invalid: "Add a real product name, audience, and email brief. Placeholder or numeric input cannot produce a useful template.",
|
|
265
|
-
revision: "Write a specific revision instruction before
|
|
265
|
+
revision: "Write a specific revision instruction before submitting it.",
|
|
266
266
|
copy: "Copy failed. You can still select and copy the text manually.",
|
|
267
267
|
submit: "The request could not be submitted.",
|
|
268
268
|
task: "The generation task failed.",
|
|
269
269
|
timeout: "The structured result did not arrive in time.",
|
|
270
|
-
schema: "The
|
|
270
|
+
schema: "The generated result could not be read safely. Please try again.",
|
|
271
271
|
generic: "The template could not be generated.",
|
|
272
272
|
recover:
|
|
273
273
|
"Check the brief, try again, or add more concrete product, audience, CTA, and variable details.",
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
const productPosterGenerator = {
|
|
2
2
|
meta: {
|
|
3
|
-
title: "AI Product Poster Generator
|
|
3
|
+
title: "AI Product Poster Generator for SaaS",
|
|
4
4
|
displayTitle: "AI Product Poster Generator",
|
|
5
5
|
description:
|
|
6
|
-
"
|
|
6
|
+
"Add a product name, benefits, audience, CTA, and optional screenshots to generate a review-ready promo poster for ads, social posts, and websites.",
|
|
7
7
|
intro: "Turn product context into a downloadable promo poster.",
|
|
8
8
|
category: "SEO marketing tools",
|
|
9
9
|
keywords: [
|
|
@@ -228,6 +228,7 @@ const productPosterGenerator = {
|
|
|
228
228
|
"The poster image could not be generated. Simplify the benefits, choose another format, or try again later.",
|
|
229
229
|
unreadableResult: "The result cannot be read right now. Try again later.",
|
|
230
230
|
timeout: "Generation is taking longer than expected. Try again later.",
|
|
231
|
+
downloadFailed: "The PNG could not be downloaded. Try again in a moment.",
|
|
231
232
|
},
|
|
232
233
|
readyKicker: "Poster ready",
|
|
233
234
|
readyTitle: "Product promo poster is ready",
|
|
@@ -44,7 +44,7 @@ const twitterGifDownloader = {
|
|
|
44
44
|
},
|
|
45
45
|
guide: {
|
|
46
46
|
heroVisualAlt: "Hero background showing a public X post link becoming GIF and MP4 downloads",
|
|
47
|
-
workspaceHeading: "
|
|
47
|
+
workspaceHeading: "Twitter GIF Downloader for X Posts",
|
|
48
48
|
workspaceHint: "Paste a public /status/ link to preview convertible media and save a GIF or MP4. Private, restricted, deleted, or media-free posts will not work.",
|
|
49
49
|
workspaceBadge: "Public link → GIF or MP4",
|
|
50
50
|
resultHeading: "What you get",
|
|
@@ -16,9 +16,9 @@ const appStoreScreenshotGenerator = {
|
|
|
16
16
|
guide: {
|
|
17
17
|
heroVisualAlt:
|
|
18
18
|
"应用商店上架图生成器 Hero 视觉图,展示一套应用商店截图。",
|
|
19
|
-
workspaceHeading: "
|
|
19
|
+
workspaceHeading: "App Store / Google Play 上架截图生成器",
|
|
20
20
|
workspaceHint:
|
|
21
|
-
"上传真实 UI
|
|
21
|
+
"上传真实 UI 截图后,在线图像生成流程会读取补充上下文、规划完整套图并提交真实生图任务。",
|
|
22
22
|
whatYouGetHeading: "生成后会得到什么",
|
|
23
23
|
valueVisualAlt:
|
|
24
24
|
"应用商店上架图导出包,展示多张手机截图、横版主图、PNG 和 SVG 文件。",
|
|
@@ -37,7 +37,7 @@ const appStoreScreenshotGenerator = {
|
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
title: "明确的来源边界",
|
|
40
|
-
body: "UI 截图是必填视觉来源;URL
|
|
40
|
+
body: "UI 截图是必填视觉来源;URL 仅用于读取公开上下文并补充 brief。避免使用真实用户、隐私数据或未授权品牌素材。",
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
title: "失败原因提示",
|
|
@@ -78,7 +78,7 @@ const appStoreScreenshotGenerator = {
|
|
|
78
78
|
supportBody: [
|
|
79
79
|
"必须上传本地 UI 截图;产品 URL、App Store / Google Play 链接、产品名和卖点用于补充标题、描述和页面摘要。",
|
|
80
80
|
"支持 Apple App Store 和 Google Play 两类平台方向,并提供完整截图套图、竖版截图或横版 feature graphic。",
|
|
81
|
-
"
|
|
81
|
+
"当前通过在线图像生成流程提交真实生图任务,但不连接 App Store Connect 或 Google Play Console 后台。",
|
|
82
82
|
"如果截图含测试账号、真实用户、隐私数据或未授权品牌,请先脱敏或不要上传。",
|
|
83
83
|
"如果没有结果,先检查 URL 是否为空、上传文件是否为 PNG/JPG/WebP、浏览器是否阻止本地文件读取,以及是否选择了正确的输入来源。",
|
|
84
84
|
"正式上架前仍要复核最新尺寸、审核政策、商标/版权授权、隐私内容、文案承诺和不同设备上的可读性。",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const coldStartChannelSelector = {
|
|
2
2
|
meta: {
|
|
3
|
-
title: "
|
|
3
|
+
title: "客户获取渠道选择器",
|
|
4
4
|
description: "为早期产品制定冷启动渠道策略。填入产品、目标客户、时间和预算,获得优先测试渠道、选择理由和下一步验证信号。",
|
|
5
5
|
intro: "先确定冷启动阶段最值得测试的渠道,再用真实信号决定下一步。",
|
|
6
6
|
category: "增长策略工具",
|
|
@@ -33,7 +33,7 @@ const coldStartChannelSelector = {
|
|
|
33
33
|
},
|
|
34
34
|
],
|
|
35
35
|
guide: {
|
|
36
|
-
workspaceTitle: "
|
|
36
|
+
workspaceTitle: "选择最值得先测试的客户获取渠道",
|
|
37
37
|
workspaceHint:
|
|
38
38
|
"输入产品、客户、时间和预算,得到适合当前阶段的冷启动渠道策略、选择理由和验证信号。",
|
|
39
39
|
workspaceBadge: "早期产品冷启动渠道策略",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const competitorAnalysis = {
|
|
2
2
|
meta: {
|
|
3
|
-
title: "竞品分析工具",
|
|
4
|
-
description: "
|
|
3
|
+
title: "AI 竞品分析工具",
|
|
4
|
+
description: "输入一个竞品的网址,在线调研流程会整理公开信息并输出结构化竞品档案:产品概览、流量与增长、业务规模、团队与融资,并附来源和可信度。",
|
|
5
5
|
intro: "把一个竞品 URL 变成一页看懂的竞品档案。基于公开网页和检索的估算,每个维度都标注可信度,帮助你做定位、增长和竞争决策。",
|
|
6
6
|
category: "市场调研工具",
|
|
7
7
|
keywords: [
|
|
@@ -36,9 +36,9 @@ const competitorAnalysis = {
|
|
|
36
36
|
submitting: "提交中…",
|
|
37
37
|
running: "调研中…",
|
|
38
38
|
emptyTitle: "竞品档案会显示在这里",
|
|
39
|
-
emptyHint: "
|
|
39
|
+
emptyHint: "输入一个竞品网址,在线调研流程会整理公开信息并生成结构化档案。",
|
|
40
40
|
runningTitle: "正在调研这个竞品",
|
|
41
|
-
runningHint: "
|
|
41
|
+
runningHint: "调研流程正在读取官网并检索公开信号,整理流量、规模、团队和融资。通常需要 1-3 分钟。",
|
|
42
42
|
status: {
|
|
43
43
|
default: "调研中",
|
|
44
44
|
PENDING: "排队中",
|
|
@@ -124,21 +124,25 @@ const competitorAnalysis = {
|
|
|
124
124
|
},
|
|
125
125
|
},
|
|
126
126
|
guide: {
|
|
127
|
+
workspaceHeading: "AI 竞品分析工具",
|
|
128
|
+
workspaceHint: "输入竞品公开网址,生成带来源的结构化档案,并为主要发现标注可信度与未知项。",
|
|
129
|
+
workspaceBadge: "仅使用公开来源",
|
|
127
130
|
visualAlt: {
|
|
128
|
-
hero: "
|
|
129
|
-
howToUse: "
|
|
130
|
-
result: "
|
|
131
|
+
hero: "包含来源与置信度的竞品档案报告。",
|
|
132
|
+
howToUse: "从公开竞品网址到有来源竞品档案的分析流程。",
|
|
133
|
+
result: "把竞品发现拆分为证据、估算、置信度与未知项。",
|
|
134
|
+
useCases: "团队把竞品研究用于定位、定价与发布决策。",
|
|
131
135
|
},
|
|
132
136
|
howToUseKicker: "使用流程",
|
|
133
137
|
howToUse: "如何分析一个竞品",
|
|
134
138
|
howToUseSteps: [
|
|
135
139
|
"粘贴竞品的公开官网网址,可选填竞品名称和你重点关注的维度。",
|
|
136
|
-
"
|
|
140
|
+
"提交后,在线调研流程会读取官网并检索公开信号,整理流量、规模、团队和融资。",
|
|
137
141
|
"结果以结构化档案返回:每个维度都带可信度,数据缺失时降级而非编造。",
|
|
138
142
|
"先看概览和流量趋势,再把“定位与机会”转成你的定位、定价或渠道假设。",
|
|
139
143
|
],
|
|
140
144
|
runtimeNote:
|
|
141
|
-
"
|
|
145
|
+
"调研通过在线流程完成,仅基于公开网页和检索结果进行估算。页面只展示结构化结果,不提供本地模板兜底。",
|
|
142
146
|
resultKicker: "结果解读",
|
|
143
147
|
resultGuidance: "如何看懂竞品档案",
|
|
144
148
|
guidanceBullets: [
|
|
@@ -169,7 +173,7 @@ const competitorAnalysis = {
|
|
|
169
173
|
},
|
|
170
174
|
{
|
|
171
175
|
question: "会处理私有或登录后的页面吗?",
|
|
172
|
-
answer: "
|
|
176
|
+
answer: "不会。调研流程只读取公开页面和公开检索结果,不抓取私有、登录或付费墙后的内容。",
|
|
173
177
|
},
|
|
174
178
|
{
|
|
175
179
|
question: "拿到结果后该做什么?",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const emailTemplateGenerator = {
|
|
2
2
|
meta: {
|
|
3
3
|
title: "邮件模板生成器",
|
|
4
|
-
description: "
|
|
4
|
+
description: "输入营销或高频交易邮件需求,由在线生成流程产出 MJML-first 邮件模板包,包含可预览 HTML、纯文本、变量、复核项和开发交付说明。",
|
|
5
5
|
intro: "把粗略邮件需求转成可预览、可修改、可导出的 MJML 邮件模板包,适合营销活动、验证码、账单、订阅成功和账号通知等场景。",
|
|
6
6
|
category: "营销工具",
|
|
7
7
|
keywords: [
|
|
@@ -16,9 +16,9 @@ const emailTemplateGenerator = {
|
|
|
16
16
|
},
|
|
17
17
|
guide: {
|
|
18
18
|
heroImageAlt: "粗略邮件需求转成 MJML、HTML、纯文本、变量和导出包的视觉图。",
|
|
19
|
-
workspaceHeading: "
|
|
19
|
+
workspaceHeading: "MJML 邮件模板生成器",
|
|
20
20
|
workspaceHint:
|
|
21
|
-
"
|
|
21
|
+
"描述邮件目标、受众、场景和品牌语气,生成流程会返回结构化的 MJML-first 邮件模板包,可预览、修改、复制和导出。",
|
|
22
22
|
workspaceBadge: "MJML 模板包",
|
|
23
23
|
outputs: "你会得到什么",
|
|
24
24
|
outputsIntro:
|
|
@@ -45,8 +45,8 @@ const emailTemplateGenerator = {
|
|
|
45
45
|
body: "在交付开发前看到营销合规、无障碍、渲染兼容和缺失信息等检查项。",
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
|
-
title: "
|
|
49
|
-
body: "
|
|
48
|
+
title: "引导式修改流程",
|
|
49
|
+
body: "生成后可以描述要改的文案、模块或结构,再生成一份新的结构化结果。",
|
|
50
50
|
},
|
|
51
51
|
],
|
|
52
52
|
valueVisualAlt: "包含 MJML、HTML、变量和开发交付说明的邮件模板包视觉图。",
|
|
@@ -72,7 +72,7 @@ const emailTemplateGenerator = {
|
|
|
72
72
|
},
|
|
73
73
|
{
|
|
74
74
|
title: "迭代速度快",
|
|
75
|
-
body: "粗略 brief
|
|
75
|
+
body: "粗略 brief 可以先生成第一版,再通过后续要求修改结构、措辞和模块。",
|
|
76
76
|
},
|
|
77
77
|
{
|
|
78
78
|
title: "预览真实有用",
|
|
@@ -103,7 +103,7 @@ const emailTemplateGenerator = {
|
|
|
103
103
|
title: "失败时怎么恢复",
|
|
104
104
|
items: [
|
|
105
105
|
"如果结果太泛,补充真实产品价值、用户分群、优惠内容、CTA、反对意见和品牌示例。",
|
|
106
|
-
"
|
|
106
|
+
"如果交易邮件显得过度营销,切换到交易场景,或在修改要求中说明移除销售性措辞。",
|
|
107
107
|
"如果缺少变量或链接,把需要的变量名写进修改要求,再通过修改框重新生成。",
|
|
108
108
|
],
|
|
109
109
|
},
|
|
@@ -153,7 +153,7 @@ const emailTemplateGenerator = {
|
|
|
153
153
|
{
|
|
154
154
|
question: "生成后可以修改吗?",
|
|
155
155
|
answer:
|
|
156
|
-
"
|
|
156
|
+
"可以。你可以查看模块并提交修改要求,下一版会以新的结构化结果返回。",
|
|
157
157
|
},
|
|
158
158
|
{
|
|
159
159
|
question: "生成的 HTML 可以直接发送吗?",
|
|
@@ -207,7 +207,7 @@ const emailTemplateGenerator = {
|
|
|
207
207
|
emptyTitle: "生成结果会显示在这里",
|
|
208
208
|
emptyHint:
|
|
209
209
|
"结果包含 HTML 预览、MJML 源码、HTML、纯文本、变量、复核说明和导出动作。",
|
|
210
|
-
runningTitle: "
|
|
210
|
+
runningTitle: "正在生成邮件模板包",
|
|
211
211
|
runningHint:
|
|
212
212
|
"它会生成 MJML、匹配的 HTML、纯文本、变量和复核说明。结构化结果短暂延迟是正常的。",
|
|
213
213
|
previewInput: "输入",
|
|
@@ -248,7 +248,7 @@ const emailTemplateGenerator = {
|
|
|
248
248
|
missing: "缺失信息",
|
|
249
249
|
empty: "没有返回相关项目。",
|
|
250
250
|
},
|
|
251
|
-
revisionLabel: "
|
|
251
|
+
revisionLabel: "修改结果",
|
|
252
252
|
revisionHint: "写具体修改要求",
|
|
253
253
|
revisionPlaceholder:
|
|
254
254
|
"例如:缩短首屏,把 CTA 改成预约演示,并增加 {{calendar_url}} 变量。",
|
|
@@ -262,12 +262,12 @@ const emailTemplateGenerator = {
|
|
|
262
262
|
},
|
|
263
263
|
errors: {
|
|
264
264
|
invalid: "请填写真实产品名称、目标受众和邮件需求。占位或纯数字输入无法生成有用模板。",
|
|
265
|
-
revision: "
|
|
265
|
+
revision: "提交前,请写清楚具体修改要求。",
|
|
266
266
|
copy: "复制失败。你仍然可以手动选中文本复制。",
|
|
267
267
|
submit: "请求提交失败。",
|
|
268
268
|
task: "生成任务失败。",
|
|
269
269
|
timeout: "结构化结果没有在限定时间内返回。",
|
|
270
|
-
schema: "
|
|
270
|
+
schema: "生成结果格式无法安全读取,请重试。",
|
|
271
271
|
generic: "邮件模板生成失败。",
|
|
272
272
|
recover:
|
|
273
273
|
"请检查邮件需求,或补充更具体的产品、受众、CTA 和变量信息后重试。",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const productPosterGenerator = {
|
|
2
2
|
meta: {
|
|
3
|
-
title: "AI
|
|
3
|
+
title: "AI 产品海报生成器:用截图、卖点和 CTA 制作宣传图",
|
|
4
4
|
displayTitle: "AI产品海报生成器",
|
|
5
5
|
description:
|
|
6
6
|
"输入产品名称、卖点、目标用户、CTA,可补充产品 URL、Logo 和截图,生成适合官网、社媒、广告和 OG 分享的产品宣传海报图。",
|
|
@@ -219,6 +219,7 @@ const productPosterGenerator = {
|
|
|
219
219
|
imageFailed: "海报图没有生成成功。可以简化卖点、换一个尺寸,或稍后再试。",
|
|
220
220
|
unreadableResult: "结果暂时无法读取。请稍后重试。",
|
|
221
221
|
timeout: "生成时间较长。请稍后重试。",
|
|
222
|
+
downloadFailed: "PNG 下载失败,请稍后重试。",
|
|
222
223
|
},
|
|
223
224
|
readyKicker: "海报已生成",
|
|
224
225
|
readyTitle: "产品宣传海报图已生成",
|
|
@@ -40,7 +40,7 @@ const twitterGifDownloader = {
|
|
|
40
40
|
},
|
|
41
41
|
guide: {
|
|
42
42
|
heroVisualAlt: "公开 X 帖子链接转换成 GIF 和 MP4 下载文件的 Hero 背景图",
|
|
43
|
-
workspaceHeading: "
|
|
43
|
+
workspaceHeading: "Twitter / X GIF 下载器",
|
|
44
44
|
workspaceHint: "粘贴带 /status/ 的公开帖子链接,预览可转换媒体后保存 GIF 或 MP4。私密、受限、已删除或没有媒体的帖子无法使用。",
|
|
45
45
|
workspaceBadge: "公开链接 → GIF 或 MP4",
|
|
46
46
|
resultHeading: "你会得到什么",
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
const appStoreScreenshotGenerator = {
|
|
2
2
|
meta: {
|
|
3
|
-
title: "App Store / Google Play
|
|
4
|
-
displayTitle: "App Store / Google Play
|
|
3
|
+
title: "App Store / Google Play 上架截圖產生器",
|
|
4
|
+
displayTitle: "App Store / Google Play 上架截圖產生器",
|
|
5
5
|
description:
|
|
6
|
-
"上傳真實 UI
|
|
7
|
-
intro: "為 App
|
|
6
|
+
"上傳真實 UI 截圖並補充產品資訊,產生 Apple App Store 或 Google Play 上架截圖套圖,方便檢視與繼續精修。",
|
|
7
|
+
intro: "為 App 發布和 ASO 準備商店截圖與橫幅主圖,利用產品脈絡和內建 prompt 產生一套視覺方向,再依平台規則複核。",
|
|
8
8
|
category: "ASO 工具",
|
|
9
9
|
keywords: [
|
|
10
10
|
"應用商店上架圖",
|
|
@@ -15,41 +15,41 @@ const appStoreScreenshotGenerator = {
|
|
|
15
15
|
},
|
|
16
16
|
guide: {
|
|
17
17
|
heroVisualAlt:
|
|
18
|
-
"
|
|
19
|
-
workspaceHeading: "
|
|
18
|
+
"應用程式商店上架圖產生器 Hero 視覺圖,展示一套應用程式商店截圖。",
|
|
19
|
+
workspaceHeading: "App Store / Google Play 上架截圖產生器",
|
|
20
20
|
workspaceHint:
|
|
21
|
-
"上傳真實 UI
|
|
22
|
-
whatYouGetHeading: "
|
|
21
|
+
"上傳真實 UI 截圖後,線上圖像產生流程會讀取補充脈絡、規劃完整套圖並提交真實圖片產生任務。",
|
|
22
|
+
whatYouGetHeading: "產生後會得到什麼",
|
|
23
23
|
valueVisualAlt:
|
|
24
|
-
"
|
|
24
|
+
"應用程式商店上架圖匯出包,展示多張手機截圖、橫幅主圖、PNG 和 SVG 檔案。",
|
|
25
25
|
whatYouGetItems: [
|
|
26
26
|
{
|
|
27
|
-
title: "
|
|
27
|
+
title: "平台尺寸套圖",
|
|
28
28
|
body: "按商店規格輸出 App Store 最多 10 張截圖,或 Google Play feature graphic 加最多 8 張手機圖,先看完整套圖方向是否成立。",
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
title: "可下載 PNG",
|
|
32
|
-
body: "
|
|
32
|
+
body: "選取某張上架圖後可直接下載 PNG,用於團隊複核、商店後台上傳或設計評審。",
|
|
33
33
|
},
|
|
34
34
|
{
|
|
35
35
|
title: "可交接 SVG 包裝",
|
|
36
|
-
body: "
|
|
36
|
+
body: "需要交給設計端時下載 SVG 包裝檔案,保留產生的圖片、尺寸和 prompt 中繼資料,方便繼續檢視和精修。",
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
39
|
title: "明確的來源邊界",
|
|
40
|
-
body: "UI 截圖是必填視覺來源;URL
|
|
40
|
+
body: "UI 截圖是必填視覺來源;URL 僅用於讀取公開脈絡並補充 brief。避免使用真實使用者、隱私資料或未授權品牌素材。",
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
title: "失敗原因提示",
|
|
44
|
-
body: "
|
|
44
|
+
body: "缺少 URL、未上傳截圖、格式不支援或匯出失敗時,結果區會提供可恢復提示,而不是產生空白素材。",
|
|
45
45
|
},
|
|
46
46
|
],
|
|
47
|
-
comparisonHeading: "
|
|
47
|
+
comparisonHeading: "一個好的上架圖產生器應該具備什麼",
|
|
48
48
|
comparisonItems: [
|
|
49
49
|
{
|
|
50
50
|
standard: "尺寸清楚",
|
|
51
51
|
manual: "手工套模板容易把 App Store 豎圖、Google Play 手機圖和橫版主圖混成同一構圖。",
|
|
52
|
-
tomako: "
|
|
52
|
+
tomako: "先依平台和版型產生對應畫布,讓你在設計精修前看清每類素材的構圖差異。",
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
standard: "速度夠快",
|
|
@@ -58,87 +58,87 @@ const appStoreScreenshotGenerator = {
|
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
60
|
standard: "結果可編輯",
|
|
61
|
-
manual: "
|
|
62
|
-
tomako: "
|
|
61
|
+
manual: "截圖產生器只提供扁平 PNG,後續修改標題、配色或真實介面時還要重做。",
|
|
62
|
+
tomako: "傳回真實產生的 PNG,並提供含 prompt 中繼資料的 SVG 包裝,方便先複核方向,再交給設計繼續精修。",
|
|
63
63
|
},
|
|
64
64
|
{
|
|
65
65
|
standard: "邊界可信",
|
|
66
|
-
manual: "
|
|
67
|
-
tomako: "
|
|
66
|
+
manual: "很多工具把產生結果說成可直接上線,忽略商店尺寸、隱私、商標和平台審核風險。",
|
|
67
|
+
tomako: "頁面和結果提示都明確說明,正式上傳前仍要依最新平台規則和品牌素材複核。",
|
|
68
68
|
},
|
|
69
69
|
{
|
|
70
70
|
standard: "素材安全",
|
|
71
|
-
manual: "
|
|
72
|
-
tomako: "
|
|
71
|
+
manual: "把未發布截圖上傳到不確定的線上工具,團隊很難判斷檔案去向。",
|
|
72
|
+
tomako: "頁面明確說明上傳截圖會進入圖片產生任務;正式產品或含隱私內容的截圖應先去識別化再使用。",
|
|
73
73
|
},
|
|
74
74
|
],
|
|
75
|
-
supportHeading: "
|
|
75
|
+
supportHeading: "支援範圍與失敗邊界",
|
|
76
76
|
supportVisualAlt:
|
|
77
|
-
"
|
|
77
|
+
"應用程式商店素材支援邊界視覺圖,展示手機圖、橫幅主圖、隱私標記和複核清單。",
|
|
78
78
|
supportBody: [
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"如果沒有結果,先檢查 URL
|
|
79
|
+
"必須上傳本機 UI 截圖;產品 URL、App Store / Google Play 連結、產品名稱和賣點用於補充標題、描述和頁面摘要。",
|
|
80
|
+
"支援 Apple App Store 和 Google Play 兩類平台方向,並提供完整截圖套圖、直式截圖或橫幅 feature graphic。",
|
|
81
|
+
"目前透過線上圖像產生流程提交真實圖片產生任務,但不連接 App Store Connect 或 Google Play Console 後台。",
|
|
82
|
+
"如果截圖含測試帳號、真實使用者、隱私資料或未授權品牌,請先去識別化或不要上傳。",
|
|
83
|
+
"如果沒有結果,先檢查 URL 是否為空、上傳檔案是否為 PNG/JPG/WebP、瀏覽器是否阻止本機檔案讀取,以及是否選擇了正確的輸入來源。",
|
|
84
84
|
"正式上架前仍要複核最新尺寸、審核政策、商標/版權授權、隱私內容、文案承諾和不同設備上的可讀性。",
|
|
85
85
|
],
|
|
86
86
|
resultGuidanceHeading: "下載後怎麼使用這些上架圖",
|
|
87
87
|
useCaseVisualAlt:
|
|
88
|
-
"
|
|
88
|
+
"產品和設計團隊整理應用程式商店上架圖素材,展示截圖板、橫幅主圖、配色和匯出資料夾。",
|
|
89
89
|
resultGuidanceBody: [
|
|
90
90
|
"把 PNG 當作方向圖或評審圖,先確認首張截圖是否講清核心收益,再決定是否繼續精修。",
|
|
91
|
-
"把 SVG
|
|
91
|
+
"把 SVG 包裝檔案交給設計師,用於追蹤 prompt、尺寸和產生的圖片,再繼續替換真實產品截圖、品牌字型、正式文案和在地化版本。",
|
|
92
92
|
"App Store 與 Google Play 不要盲目複用同一張圖。豎版截圖、iPad 圖和橫版 feature graphic 應分別檢查主體比例。",
|
|
93
|
-
"
|
|
94
|
-
"
|
|
93
|
+
"如果產生的圖片看起來資訊太滿,優先刪除小標籤、次要功能和過長副標題,讓首屏利益點更清楚。",
|
|
94
|
+
"上傳到真實商店後台前,使用最新官方規格和審核指南複查尺寸、內容、隱私、商標、版權和誇張承諾。",
|
|
95
95
|
],
|
|
96
96
|
useCasesHeading: "適用場景",
|
|
97
97
|
useCaseItems: [
|
|
98
98
|
"獨立開發者準備首版 App Store 或 Google Play 上架素材,先確定視覺方向。",
|
|
99
99
|
"增長團隊快速比較 ASO 截圖、功能賣點圖和橫版主圖的不同風格。",
|
|
100
100
|
"產品團隊把新版本 UI 截圖轉成商店更新素材,用於發佈計劃或活動頁評審。",
|
|
101
|
-
"
|
|
101
|
+
"設計師收到粗略產品 brief 後,先產生低擬真方向,再決定最終畫板和截圖順序。",
|
|
102
102
|
"外包或遠程團隊用 PNG/SVG 對齊文案、構圖和品牌色,減少反覆溝通。",
|
|
103
|
-
"上架前檢查 App Icon
|
|
103
|
+
"上架前檢查 App Icon、商店截圖、社群媒體素材是否使用同一套品牌語言。",
|
|
104
104
|
],
|
|
105
105
|
faqHeading: "常見問題",
|
|
106
106
|
faqItems: [
|
|
107
107
|
{
|
|
108
108
|
question: "這個工具會自動抓取產品 URL 嗎?",
|
|
109
109
|
answer:
|
|
110
|
-
"
|
|
110
|
+
"會讀取可公開存取頁面的 title、description、OG 資訊和少量頁面摘要,用來推導產品賣點和套圖文案。登入後內容、阻擋自動存取的頁面或無法存取的 URL 可能讀取失敗。",
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
|
-
question: "上傳的 UI
|
|
113
|
+
question: "上傳的 UI 截圖會儲存到伺服器嗎?",
|
|
114
114
|
answer:
|
|
115
|
-
"選擇 UI
|
|
115
|
+
"選擇 UI 截圖模式時,截圖會作為參考圖提交給圖片產生服務。請不要上傳真實使用者資料、未去識別化的後台畫面、客戶資訊或未授權品牌素材。",
|
|
116
116
|
},
|
|
117
117
|
{
|
|
118
|
-
question: "
|
|
118
|
+
question: "產生的 PNG 能直接上傳到 App Store 或 Google Play 嗎?",
|
|
119
119
|
answer:
|
|
120
|
-
"
|
|
120
|
+
"可以作為團隊複核或上傳前預覽,但正式發布前必須依平台最新尺寸、內容政策、隱私、商標和版權要求複查。不要把產生結果當成最終審核保證。",
|
|
121
121
|
},
|
|
122
122
|
{
|
|
123
123
|
question: "為什麼還提供 SVG 下載?",
|
|
124
124
|
answer:
|
|
125
|
-
"
|
|
125
|
+
"目前 SVG 是產生圖片的包裝檔案,會保留圖片引用、尺寸和 prompt 中繼資料,方便交給設計師檢視方向並繼續精修。",
|
|
126
126
|
},
|
|
127
127
|
{
|
|
128
128
|
question: "沒有真實產品截圖時能用嗎?",
|
|
129
129
|
answer:
|
|
130
|
-
"需要先上傳真實 UI
|
|
130
|
+
"需要先上傳真實 UI 截圖產生上架圖;產品 URL 或產品名稱只能補充脈絡,不能取代真實介面。",
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
133
|
question: "這個工具會檢查最新商店審核規則嗎?",
|
|
134
134
|
answer:
|
|
135
|
-
"
|
|
135
|
+
"不會。它負責產生視覺結果,不連接 App Store Connect、Google Play Console 或即時政策介面。正式上傳前請依官方後台和最新指南複核。",
|
|
136
136
|
},
|
|
137
137
|
],
|
|
138
138
|
ctaPrimary: "先切 App Icon",
|
|
139
139
|
ctaSecondary: "返回全部工具",
|
|
140
140
|
ctaHint:
|
|
141
|
-
"商店截圖通常和 App Icon
|
|
141
|
+
"商店截圖通常和 App Icon 一起評審。如果圖示尺寸包還沒準備好,可以先產生 App Icon 資源,再回來統一上架圖風格。",
|
|
142
142
|
},
|
|
143
143
|
} as const;
|
|
144
144
|
|