free-short-video 5.3.0 → 5.3.1

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/bin/cli.js CHANGED
@@ -21,6 +21,27 @@ const os = require('os');
21
21
 
22
22
  const PKG_ROOT = path.resolve(__dirname, '..');
23
23
 
24
+ // 终端超链接(ANSI OSC 8):TTY 下输出可点击链接,非 TTY(管道/重定向)降级为纯文本
25
+ const link = (url, text) =>
26
+ process.stdout.isTTY ? `\x1b]8;;${url}\x1b\\${text}\x1b]8;;\x1b\\` : text;
27
+
28
+ // 启动图案(ASCII art):TTY 下亮青色显示,非 TTY 纯文本
29
+ const FSV_LOGO = String.raw` _____ ______ __
30
+ | ___/ ___\ \ / /
31
+ | |_ \___ \\ \ / /
32
+ | _| ___) |\ V /
33
+ |_| |____/ \_/`.split('\n');
34
+ function printLogo() {
35
+ if (process.stdout.isTTY) {
36
+ console.log('\x1b[1;36m');
37
+ FSV_LOGO.forEach((l) => console.log(l));
38
+ process.stdout.write('\x1b[0m');
39
+ } else {
40
+ console.log('');
41
+ FSV_LOGO.forEach((l) => console.log(l));
42
+ }
43
+ }
44
+
24
45
  function printHelp() {
25
46
  console.log(`free-short-video — free AI short-video generator
26
47
 
@@ -37,6 +58,9 @@ Options:
37
58
  Environment:
38
59
  AGNES_API_KEY Your Agnes API key (can also be set later in the Web UI)
39
60
 
61
+ Website:
62
+ ${link('https://video.lichuanyang.top', 'https://video.lichuanyang.top')} (official site & no-install online demo)
63
+
40
64
  First run creates a local venv and installs Python dependencies automatically.
41
65
  `);
42
66
  }
@@ -96,7 +120,10 @@ function venvBin(name) {
96
120
 
97
121
  // ── 1. python check ───────────────────────────────────────────────────────
98
122
  console.log('================================================');
99
- console.log(' free-short-video');
123
+ printLogo();
124
+ console.log(' free-short-video — Free AI short-video generator');
125
+ console.log('');
126
+ console.log(` 🌐 官网: ${link('https://video.lichuanyang.top', 'https://video.lichuanyang.top')} | ⚡ 在线体验: ${link('https://video.lichuanyang.top/demo', 'https://video.lichuanyang.top/demo')}`);
100
127
  console.log('================================================');
101
128
  console.log('');
102
129
 
package/core/config.py CHANGED
@@ -15,6 +15,12 @@ logger = logging.getLogger(__name__)
15
15
  CONFIG_DIR = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), ".agnes_config")
16
16
  CONFIG_FILE = os.path.join(CONFIG_DIR, "config.json")
17
17
 
18
+ # 未配置 API Key 时的统一报错文案(含免费获取与在线体验兜底,全站路由共用)
19
+ API_KEY_MISSING_MSG = (
20
+ "请先配置 API Key。免费获取:https://platform.agnes-ai.com | "
21
+ "不想配置?在线体验:https://video.lichuanyang.top/demo"
22
+ )
23
+
18
24
  # 项目根目录
19
25
  _PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
20
26
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "free-short-video",
3
- "version": "5.3.0",
4
- "description": "Free AI short-video generator — run the full free-short-video service locally with one command. Text-to-video, image generation, Edge-TTS narration, subtitles, and compositing, all free.",
3
+ "version": "5.3.1",
4
+ "description": "Free AI short-video generator — run the full free-short-video service locally with one command. Text-to-video, image generation, Edge-TTS narration, subtitles, and compositing, all free. Official site: https://video.lichuanyang.top",
5
5
  "bin": {
6
6
  "free-short-video": "bin/cli.js",
7
7
  "fsv": "bin/cli.js"
package/server.py CHANGED
@@ -72,7 +72,15 @@ async def lifespan(app: FastAPI):
72
72
  yield
73
73
 
74
74
 
75
- app = FastAPI(title="Agnes Video Generator", lifespan=lifespan)
75
+ app = FastAPI(
76
+ title="Agnes Video Generator",
77
+ description=(
78
+ "完全免费的 AI 视频生成服务。官网:https://video.lichuanyang.top | "
79
+ "API 文档:https://video.lichuanyang.top/api-docs | "
80
+ "调用指南:https://video.lichuanyang.top/guides/api-call"
81
+ ),
82
+ lifespan=lifespan,
83
+ )
76
84
 
77
85
 
78
86
  # ═══════════════════════════════════════════════════
package/static/index.html CHANGED
@@ -353,6 +353,11 @@
353
353
  <button id="apikey-save" class="px-5 py-2.5 bg-blue-600 hover:bg-blue-500 rounded-lg text-sm font-medium transition shadow-lg shadow-blue-600/20" data-i18n="save">保存</button>
354
354
  <button id="apikey-clear" class="px-5 py-2.5 bg-red-600/80 hover:bg-red-500 rounded-lg text-sm font-medium transition hidden" data-i18n="clear">清除</button>
355
355
  </div>
356
+ <div class="flex flex-wrap items-center gap-x-5 gap-y-1.5 mt-3 text-xs">
357
+ <a href="https://platform.agnes-ai.com" target="_blank" rel="noopener" class="text-amber-400/70 hover:text-amber-300 transition-colors">🚀 <span data-i18n="apiKeyGetLink">免费获取 API Key</span></a>
358
+ <a href="https://video.lichuanyang.top/guides/api-key" target="_blank" rel="noopener" class="text-gray-500 hover:text-gray-300 transition-colors">📖 <span data-i18n="apiKeyGuideLink">配置教程</span></a>
359
+ <a href="https://video.lichuanyang.top/demo" target="_blank" rel="noopener" class="text-gray-500 hover:text-gray-300 transition-colors">⚡ <span data-i18n="apiKeyDemoLink">不想配置?在线体验</span></a>
360
+ </div>
356
361
  </div>
357
362
  </div>
358
363
 
@@ -519,8 +524,21 @@
519
524
  </button>
520
525
  </div>
521
526
 
527
+ <!-- 官网引导:提示词技巧 + 模型对比(常驻) -->
528
+ <div class="flex flex-wrap items-center gap-x-4 gap-y-1 mb-4 text-xs text-gray-500">
529
+ <span class="text-gray-600">💡</span>
530
+ <a href="https://video.lichuanyang.top/guides/prompt-tips" target="_blank" rel="noopener" class="hover:text-blue-300 transition-colors"><span data-i18n="formTipTips">🎯 提示词技巧</span></a>
531
+ <span class="text-white/10 select-none">·</span>
532
+ <a href="https://video.lichuanyang.top/guides/model-overview" target="_blank" rel="noopener" class="hover:text-blue-300 transition-colors"><span data-i18n="formTipModels">🧠 模型对比</span></a>
533
+ </div>
534
+
522
535
  <!-- ═══════ Tab 1: Simple Image & Video ═══════ -->
523
536
  <div id="form-simple" class="hidden">
537
+ <!-- 官网引导:示例提示词 -->
538
+ <div class="flex items-center gap-2 mb-4 text-xs text-gray-500">
539
+ <span class="text-gray-600">💡</span>
540
+ <a href="https://video.lichuanyang.top/guides/prompt-examples-simple" target="_blank" rel="noopener" class="hover:text-blue-300 transition-colors"><span data-i18n="exampleLinkSimple">📋 简易视频示例提示词</span></a>
541
+ </div>
524
542
  <!-- Sub-mode selector: Video vs Image -->
525
543
  <div class="glass-card rounded-xl p-3 mb-4 flex items-center gap-3">
526
544
  <label class="text-sm text-gray-400 whitespace-nowrap" data-i18n="subModeLabel">生成类型</label>
@@ -698,6 +716,11 @@
698
716
 
699
717
  <!-- ═══════ Tab 2: Creative Video ═══════ -->
700
718
  <div id="form-creative">
719
+ <!-- 官网引导:示例提示词 -->
720
+ <div class="flex items-center gap-2 mb-4 text-xs text-gray-500">
721
+ <span class="text-gray-600">💡</span>
722
+ <a href="https://video.lichuanyang.top/guides/prompt-examples-creative" target="_blank" rel="noopener" class="hover:text-blue-300 transition-colors"><span data-i18n="exampleLinkCreative">📋 创意长视频示例提示词</span></a>
723
+ </div>
701
724
  <div class="glass-card rounded-2xl p-6 mb-4">
702
725
  <h2 class="text-lg font-semibold text-blue-300 mb-4" data-i18n="creativeSettings">创意设置</h2>
703
726
 
@@ -962,6 +985,11 @@
962
985
 
963
986
  <!-- ═══════ Tab 3: Manuscript Video ═══════ -->
964
987
  <div id="form-manuscript" class="hidden">
988
+ <!-- 官网引导:示例提示词 -->
989
+ <div class="flex items-center gap-2 mb-4 text-xs text-gray-500">
990
+ <span class="text-gray-600">💡</span>
991
+ <a href="https://video.lichuanyang.top/guides/prompt-examples-manuscript" target="_blank" rel="noopener" class="hover:text-blue-300 transition-colors"><span data-i18n="exampleLinkManuscript">📋 稿件视频示例</span></a>
992
+ </div>
965
993
  <div class="glass-card rounded-2xl p-6 mb-4">
966
994
  <h2 class="text-lg font-semibold text-blue-300 mb-4" data-i18n="manuscriptSettings">稿件设置</h2>
967
995
 
@@ -1115,6 +1143,11 @@
1115
1143
 
1116
1144
  <!-- ═══════ Tab 4: Anchor Video ═══════ -->
1117
1145
  <div id="form-anchor" class="hidden">
1146
+ <!-- 官网引导:示例提示词 -->
1147
+ <div class="flex items-center gap-2 mb-4 text-xs text-gray-500">
1148
+ <span class="text-gray-600">💡</span>
1149
+ <a href="https://video.lichuanyang.top/guides/prompt-examples-anchor" target="_blank" rel="noopener" class="hover:text-blue-300 transition-colors"><span data-i18n="exampleLinkAnchor">📋 数字人示例</span></a>
1150
+ </div>
1118
1151
  <div class="glass-card rounded-2xl p-6 mb-4">
1119
1152
  <h2 class="text-lg font-semibold text-blue-300 mb-4" data-i18n="anchorSettings">数字人设置</h2>
1120
1153
 
@@ -1502,6 +1535,8 @@
1502
1535
 
1503
1536
  <div class="space-y-2" id="steps-container"></div>
1504
1537
 
1538
+ <p class="mt-4 text-xs text-gray-500"><a href="https://video.lichuanyang.top/use-cases" target="_blank" rel="noopener" class="hover:text-blue-300 transition-colors" data-i18n="waitTip">💡 等待生成时,看看别人用 Agnes 做了什么</a></p>
1539
+
1505
1540
  <div id="progress-message" class="mt-4 text-sm text-gray-400"></div>
1506
1541
 
1507
1542
  <!-- 中间产物面板 -->
@@ -1516,6 +1551,12 @@
1516
1551
  <div id="result-area" class="hidden mt-4 p-4 glass-card rounded-lg">
1517
1552
  <p class="text-green-400 text-sm font-medium mb-2" data-i18n="videoComplete">视频生成完成!</p>
1518
1553
  <video id="result-video" controls class="w-full rounded-lg max-h-96"></video>
1554
+ <div class="flex flex-wrap items-center gap-x-4 gap-y-1 mt-3 text-xs">
1555
+ <span>🎉</span>
1556
+ <a href="https://video.lichuanyang.top/tools/tiktok" target="_blank" rel="noopener" class="text-amber-400/70 hover:text-amber-300 transition-colors" data-i18n="doneTipTiktok">📈 学学社媒玩法</a>
1557
+ <span class="text-white/10 select-none">·</span>
1558
+ <a href="https://video.lichuanyang.top/use-cases" target="_blank" rel="noopener" class="text-gray-500 hover:text-gray-300 transition-colors" data-i18n="doneTipMore">🎬 更多创作方向</a>
1559
+ </div>
1519
1560
  </div>
1520
1561
  </div>
1521
1562
 
@@ -1632,7 +1673,7 @@ const T = {
1632
1673
  zh: {
1633
1674
  subtitle: 'AI 视频,一键生成',
1634
1675
  apiKeyTitle: 'API Key 配置', apiKeyNotConfigured: '未配置', apiKeyConfigured: '已配置',
1635
- apiKeyPlaceholder: '输入 Agnes API Key', apiKeyMasked: '已配置 (●●●)', save: '保存',
1676
+ apiKeyPlaceholder: '输入 Agnes API Key(在 platform.agnes-ai.com 免费获取)', apiKeyMasked: '已配置 (●●●)', save: '保存',
1636
1677
  clear: '清除', clearConfirm: '确定要清除已配置的 API Key 吗?', apiKeyFromEnv: '已配置 (环境变量)',
1637
1678
  clearEnvHint: '当前 API Key 来自环境变量 AGNES_API_KEY,无法从界面清除。请取消环境变量后重试。',
1638
1679
  modelTitle: '模型选择', modelHint: '选择生成时使用的 Agnes 模型。图像与视频模型暂未开放,保留默认配置。',
@@ -1654,7 +1695,7 @@ const T = {
1654
1695
  ttSimple: '简易图像视频', ttCreative: '创意长视频', ttManuscript: '稿件长视频',
1655
1696
  subModeLabel: '生成类型', subModeVideo: '🎬 视频', subModeImage: '🖼️ 图像',
1656
1697
  simpleSettings: '简单视频设置', creativeSettings: '创意设置', manuscriptSettings: '稿件设置',
1657
- promptLabel: '视频描述', promptPlaceholder: '描述你想要的视频画面...',
1698
+ promptLabel: '视频描述', promptPlaceholder: '一只橘猫趴在雨后窗台上打盹,阳光透过玻璃洒在毛上,微风吹动窗帘,4K 写实',
1658
1699
  genMode: '生成模式', modeT2v: '文生视频', modeI2v: '图生视频', modeKeyframesSimple: '关键帧',
1659
1700
  duration: '时长', resolution: '分辨率',
1660
1701
  resPortrait: '竖屏 9:16', resLandscape: '横屏 16:9', resSquare: '方形 1:1',
@@ -1662,7 +1703,7 @@ const T = {
1662
1703
  chooseImage: '选择参考图', notSelected: '未选择',
1663
1704
  advancedSettings: '高级设置', optional: '可选', seedPlaceholder: '留空随机', negativePlaceholder: '排除不希望出现的元素',
1664
1705
  taskName: '任务名称', taskNamePlaceholder: '可选,留空自动生成',
1665
- ideaLabel: '创意描述', ideaPlaceholder: '描述你心中的故事、场景和角色...',
1706
+ ideaLabel: '创意描述', ideaPlaceholder: '一个机器人在废弃城市里为小花浇水,3 个场景:发现花苗→搬来水源→花开',
1666
1707
  visualStyle: '视觉风格',
1667
1708
  requirementDefault: '3个场景,每个场景5秒,电影质感', styleDefault: '电影质感写实风格',
1668
1709
  chainingMode: '串联模式', modeKeyframes: 'keyframes (推荐)', modeTi2vid: 'ti2vid (过渡帧)', modeNone: 'none (独立场景)',
@@ -1680,7 +1721,7 @@ const T = {
1680
1721
  subStrokeColor: '描边色', subStrokeWidth: '描边宽', subBgColor: '背景色',
1681
1722
  subStyleMode: '样式模式', subStyleFixed: '固定样式', subStyleLLM: 'AI 智能样式',
1682
1723
  subStyleHints: '样式偏好描述', subStyleHintsHint: '描述你期望的字幕样式变化规律,AI 会据此为每条字幕分配不同位置、颜色和字号',
1683
- manuscriptText: '稿件正文', manuscriptPlaceholder: '粘贴你的文章、新闻稿、公众号文章等...',
1724
+ manuscriptText: '稿件正文', manuscriptPlaceholder: '粘贴你的文章、新闻稿、公众号文章等,例如:一篇 500 字的产品介绍或旅行游记,系统会自动拆段成片',
1684
1725
  charCount: '字数',
1685
1726
  startGenerate: '开始生成视频', submitting: '提交中...', taskRunning: '任务进行中...',
1686
1727
  loading: '加载中...', noTasks: '暂无任务', loadFailed: '加载失败',
@@ -1739,7 +1780,7 @@ const T = {
1739
1780
  pStepBuildScenes: '分镜拆分', pStepVideoGen: '视频生成', pStepAudio: '朗诵配音', pStepSubtitle: '字幕生成', pStepConcat: '视频拼接',
1740
1781
  enterPoem: '请输入古诗原文',
1741
1782
  ttImage: '简单图片', imageSettings: '图片设置',
1742
- imagePrompt: '图片描述', imagePromptPlaceholder: '描述你想要的图片画面...',
1783
+ imagePrompt: '图片描述', imagePromptPlaceholder: '雪山脚下的湖泊,清晨薄雾,水面倒映雪山,摄影级光影,横构图',
1743
1784
  imageSize: '图片尺寸', refImageHint: '可选。上传后以该图为基底生成变体;不上传则纯 AI 生成',
1744
1785
  imgGenerate: '开始生成图片', imgComplete: '图片生成完成!', generating: '生成中...', enterImagePrompt: '请输入图片描述',
1745
1786
  anchorSettings: '数字人设置',
@@ -1748,7 +1789,7 @@ const T = {
1748
1789
  anchorRefImage: '参考图 (可选)',
1749
1790
  anchorRefImageHint: '可选。上传后以该图为基底微调主播形象;不上传则纯 AI 生成',
1750
1791
  scriptText: '口播稿件',
1751
- scriptTextPlaceholder: '输入主播要朗读的口播稿件...',
1792
+ scriptTextPlaceholder: '欢迎收看今天的科技快报。第一条消息:AI 视频生成已经进入免费时代,人人都能用一段文字创作短视频……',
1752
1793
  resPortraitHD: '竖屏 9:16 (HD)',
1753
1794
  subPositionHints: '字幕位置要求',
1754
1795
  subPositionHintsPlaceholder: '字幕放在画面下方三分之一区域,不要遮挡主播面部',
@@ -1778,11 +1819,23 @@ const T = {
1778
1819
  artifactDeleted: '产物已删除', artifactDeleteFailed: '删除失败',
1779
1820
  clickToPreview: '点击预览', 'delete': '删除',
1780
1821
  taskStarting: '任务正在启动...',
1822
+ apiKeyGetLink: '免费获取 API Key',
1823
+ apiKeyGuideLink: '配置教程',
1824
+ apiKeyDemoLink: '不想配置?在线体验',
1825
+ formTipTips: '🎯 提示词技巧',
1826
+ formTipModels: '🧠 模型对比',
1827
+ exampleLinkSimple: '📋 简易视频示例提示词',
1828
+ exampleLinkCreative: '📋 创意长视频示例提示词',
1829
+ exampleLinkManuscript: '📋 稿件视频示例',
1830
+ exampleLinkAnchor: '📋 数字人示例',
1831
+ waitTip: '💡 等待生成时,看看别人用 Agnes 做了什么',
1832
+ doneTipTiktok: '📈 学学社媒玩法',
1833
+ doneTipMore: '🎬 更多创作方向',
1781
1834
  },
1782
1835
  en: {
1783
1836
  subtitle: 'AI Video, One Click',
1784
1837
  apiKeyTitle: 'API Key Configuration', apiKeyNotConfigured: 'Not configured', apiKeyConfigured: 'Configured',
1785
- apiKeyPlaceholder: 'Enter Agnes API Key', apiKeyMasked: 'Configured (●●●)', save: 'Save',
1838
+ apiKeyPlaceholder: 'Enter your Agnes API Key (get one free at platform.agnes-ai.com)', apiKeyMasked: 'Configured (●●●)', save: 'Save',
1786
1839
  clear: 'Clear', clearConfirm: 'Are you sure you want to clear the configured API Key?', apiKeyFromEnv: 'Configured (env)',
1787
1840
  clearEnvHint: 'The API Key is set via environment variable AGNES_API_KEY and cannot be cleared from the UI.',
1788
1841
  modelTitle: 'Model Selection', modelHint: 'Choose the Agnes models used for generation. Image and video models are not yet open; their defaults are kept.',
@@ -1804,7 +1857,7 @@ const T = {
1804
1857
  ttSimple: 'Image & Video', ttCreative: 'Creative Video', ttManuscript: 'Article Video',
1805
1858
  subModeLabel: 'Type', subModeVideo: '🎬 Video', subModeImage: '🖼️ Image',
1806
1859
  simpleSettings: 'Simple Video Settings', creativeSettings: 'Creative Settings', manuscriptSettings: 'Article Settings',
1807
- promptLabel: 'Video Description', promptPlaceholder: 'Describe the video you want...',
1860
+ promptLabel: 'Video Description', promptPlaceholder: 'A ginger cat dozing on a rainy windowsill, sunlight streaming through the glass, curtains swaying in the breeze, 4K photorealistic',
1808
1861
  genMode: 'Generation Mode', modeT2v: 'Text to Video', modeI2v: 'Image to Video', modeKeyframesSimple: 'Keyframes',
1809
1862
  duration: 'Duration', resolution: 'Resolution',
1810
1863
  resPortrait: 'Portrait 9:16', resLandscape: 'Landscape 16:9', resSquare: 'Square 1:1',
@@ -1812,7 +1865,7 @@ const T = {
1812
1865
  chooseImage: 'Choose Image', notSelected: 'Not selected',
1813
1866
  advancedSettings: 'Advanced Settings', optional: 'Optional', seedPlaceholder: 'Leave blank for random', negativePlaceholder: 'Elements to exclude',
1814
1867
  taskName: 'Task Name', taskNamePlaceholder: 'Optional, auto-generated if blank',
1815
- ideaLabel: 'Idea Description', ideaPlaceholder: 'Describe your story, scenes, and characters...',
1868
+ ideaLabel: 'Idea Description', ideaPlaceholder: 'A robot watering a small flower in an abandoned city, 3 scenes: discovering the sprout, fetching water, the flower blooms',
1816
1869
  visualStyle: 'Visual Style',
1817
1870
  requirementDefault: '3 scenes, 5 seconds each, cinematic quality', styleDefault: 'cinematic realistic style',
1818
1871
  chainingMode: 'Chaining Mode', modeKeyframes: 'keyframes (recommended)', modeTi2vid: 'ti2vid (transition)', modeNone: 'none (independent)',
@@ -1830,7 +1883,7 @@ const T = {
1830
1883
  subStrokeColor: 'Stroke Color', subStrokeWidth: 'Stroke Width', subBgColor: 'BG Color',
1831
1884
  subStyleMode: 'Style Mode', subStyleFixed: 'Fixed', subStyleLLM: 'AI Smart',
1832
1885
  subStyleHints: 'Style Preferences', subStyleHintsHint: 'Describe how subtitles should vary in position, color, and size. AI will assign per-subtitle styles accordingly.',
1833
- manuscriptText: 'Article Text', manuscriptPlaceholder: 'Paste your article, news, blog post...',
1886
+ manuscriptText: 'Article Text', manuscriptPlaceholder: 'Paste your article, press release or blog post. For example: a 500-word product introduction or a travel essay - the system splits it into scenes automatically',
1834
1887
  charCount: 'Characters',
1835
1888
  startGenerate: 'Start Generating', submitting: 'Submitting...', taskRunning: 'Task in progress...',
1836
1889
  loading: 'Loading...', noTasks: 'No tasks', loadFailed: 'Load failed',
@@ -1882,7 +1935,7 @@ const T = {
1882
1935
  pStepBuildScenes: 'Scene Split', pStepVideoGen: 'Video Gen', pStepAudio: 'Narration', pStepSubtitle: 'Subtitle', pStepConcat: 'Concatenate',
1883
1936
  enterPoem: 'Please enter the poem text',
1884
1937
  ttImage: 'Simple Image', imageSettings: 'Image Settings',
1885
- imagePrompt: 'Image Description', imagePromptPlaceholder: 'Describe the image you want...',
1938
+ imagePrompt: 'Image Description', imagePromptPlaceholder: 'A lake at the foot of snow-capped mountains, morning mist, mountains reflected in the water, cinematic lighting, landscape orientation',
1886
1939
  imageSize: 'Image Size', refImageHint: 'Optional. Upload to generate variations; leave blank for pure AI generation.',
1887
1940
  imgGenerate: 'Generate Image', imgComplete: 'Image generated!', generating: 'Generating...', enterImagePrompt: 'Please enter an image description',
1888
1941
  anchorSettings: 'Digital Human Settings',
@@ -1891,7 +1944,7 @@ const T = {
1891
1944
  anchorRefImage: 'Reference Image (Optional)',
1892
1945
  anchorRefImageHint: 'Optional. Upload to fine-tune the anchor appearance; leave blank for pure AI generation.',
1893
1946
  scriptText: 'Script Text',
1894
- scriptTextPlaceholder: 'Enter the script for the anchor to read...',
1947
+ scriptTextPlaceholder: 'Welcome to today\'s tech bulletin. First story: AI video generation has entered the free era - anyone can turn a text prompt into a short video...',
1895
1948
  resPortraitHD: 'Portrait 9:16 (HD)',
1896
1949
  subPositionHints: 'Subtitle Position Hints',
1897
1950
  subPositionHintsPlaceholder: 'Place subtitles in the lower third, avoid covering the anchor\'s face',
@@ -1921,11 +1974,23 @@ const T = {
1921
1974
  artifactDeleted: 'Artifact deleted', artifactDeleteFailed: 'Delete failed',
1922
1975
  clickToPreview: 'Click to preview', 'delete': 'Delete',
1923
1976
  taskStarting: 'Task starting...',
1977
+ apiKeyGetLink: 'Get a free API Key',
1978
+ apiKeyGuideLink: 'Setup guide',
1979
+ apiKeyDemoLink: 'Prefer not to configure? Try online',
1980
+ formTipTips: '🎯 Prompt tips',
1981
+ formTipModels: '🧠 Model comparison',
1982
+ exampleLinkSimple: '📋 Simple video prompt examples',
1983
+ exampleLinkCreative: '📋 Creative video prompt examples',
1984
+ exampleLinkManuscript: '📋 Manuscript video examples',
1985
+ exampleLinkAnchor: '📋 Digital anchor examples',
1986
+ waitTip: '💡 While you wait, see what others create with Agnes',
1987
+ doneTipTiktok: '📈 Social media playbook',
1988
+ doneTipMore: '🎬 More creation ideas',
1924
1989
  },
1925
1990
  ru: {
1926
1991
  subtitle: 'AI Видео, Один клик',
1927
1992
  apiKeyTitle: 'API Key', apiKeyNotConfigured: 'Не настроен', apiKeyConfigured: 'Настроен',
1928
- apiKeyPlaceholder: 'Введите Agnes API Key', apiKeyMasked: 'Настроен (●●●)', save: 'Сохранить',
1993
+ apiKeyPlaceholder: 'Введите Agnes API Key (бесплатно на platform.agnes-ai.com)', apiKeyMasked: 'Настроен (●●●)', save: 'Сохранить',
1929
1994
  clear: 'Очистить', clearConfirm: 'Вы уверены, что хотите удалить API Key?', apiKeyFromEnv: 'Настроен (env)',
1930
1995
  clearEnvHint: 'API Key задан через переменную AGNES_API_KEY и не может быть удалён из интерфейса.',
1931
1996
  modelTitle: 'Выбор модели', modelHint: 'Выберите модели Agnes для генерации. Модели изображений и видео пока не открыты; сохраняются значения по умолчанию.',
@@ -1947,7 +2012,7 @@ const T = {
1947
2012
  ttSimple: 'Изобр. и видео', ttCreative: 'Креативное видео', ttManuscript: 'Видео из статьи',
1948
2013
  subModeLabel: 'Тип', subModeVideo: '🎬 Видео', subModeImage: '🖼️ Изображение',
1949
2014
  simpleSettings: 'Настройки простого видео', creativeSettings: 'Настройки сценария', manuscriptSettings: 'Настройки статьи',
1950
- promptLabel: 'Описание видео', promptPlaceholder: 'Опишите желаемое видео...',
2015
+ promptLabel: 'Описание видео', promptPlaceholder: 'Рыжий кот дремлет на подоконнике после дождя, солнечные лучи падают на шерсть, ветер колышет шторы, 4K фотореализм',
1951
2016
  genMode: 'Режим', modeT2v: 'Текст в видео', modeI2v: 'Изображение в видео', modeKeyframesSimple: 'Ключевые кадры',
1952
2017
  duration: 'Длительность', resolution: 'Разрешение',
1953
2018
  resPortrait: 'Вертикальное 9:16', resLandscape: 'Горизонтальное 16:9', resSquare: 'Квадрат 1:1',
@@ -1955,7 +2020,7 @@ const T = {
1955
2020
  chooseImage: 'Выбрать', notSelected: 'Не выбрано',
1956
2021
  advancedSettings: 'Расширенные', optional: 'Опционально', seedPlaceholder: 'Пусто = случайно', negativePlaceholder: 'Исключить элементы',
1957
2022
  taskName: 'Название', taskNamePlaceholder: 'Необязательно',
1958
- ideaLabel: 'Идея', ideaPlaceholder: 'Опишите историю, сцены, персонажей...',
2023
+ ideaLabel: 'Идея', ideaPlaceholder: 'Робот поливает маленький цветок в заброшенном городе, 3 сцены: росток найден, вода принесена, цветок распускается',
1959
2024
  visualStyle: 'Стиль',
1960
2025
  requirementDefault: '3 сцены, по 5 секунд, кинематографическое качество', styleDefault: 'кинематографический реалистичный стиль',
1961
2026
  chainingMode: 'Связывание', modeKeyframes: 'keyframes', modeTi2vid: 'ti2vid', modeNone: 'none',
@@ -1969,7 +2034,7 @@ const T = {
1969
2034
  subStrokeColor: 'Цвет обводки', subStrokeWidth: 'Ширина обводки', subBgColor: 'Цвет фона',
1970
2035
  subStyleMode: 'Режим', subStyleFixed: 'Фикс.', subStyleLLM: 'AI стиль',
1971
2036
  subStyleHints: 'Описание стиля', subStyleHintsHint: 'Опишите желаемое изменение стиля субтитров. AI назначит каждой субтитре позицию, цвет и размер.',
1972
- manuscriptText: 'Текст статьи', manuscriptPlaceholder: 'Вставьте статью...',
2037
+ manuscriptText: 'Текст статьи', manuscriptPlaceholder: 'Вставьте статью, пресс-релиз или пост из блога. Например: описание продукта на 500 слов или путевые заметки - система разобьёт текст на сцены автоматически',
1973
2038
  charCount: 'Символов',
1974
2039
  startGenerate: 'Начать генерацию', submitting: 'Отправка...', taskRunning: 'Выполняется...',
1975
2040
  loading: 'Загрузка...', noTasks: 'Нет задач', loadFailed: 'Ошибка загрузки',
@@ -2009,7 +2074,7 @@ const T = {
2009
2074
  domainSaved: 'Сохранено',
2010
2075
  domainSaveFailed: 'Ошибка сохранения',
2011
2076
  ttImage: 'Простое изображение', imageSettings: 'Настройки изображения',
2012
- imagePrompt: 'Описание', imagePromptPlaceholder: 'Опишите желаемое изображение...',
2077
+ imagePrompt: 'Описание', imagePromptPlaceholder: 'Озеро у подножия заснеженных гор, утренний туман, отражение гор в воде, кинематографичный свет, горизонтальная композиция',
2013
2078
  imageSize: 'Размер', refImageHint: 'Опционально. Загрузите для создания вариаций.',
2014
2079
  imgGenerate: 'Создать', imgComplete: 'Изображение создано!', generating: 'Создание...', enterImagePrompt: 'Введите описание изображения',
2015
2080
  anchorSettings: 'Настройки ведущего',
@@ -2018,7 +2083,7 @@ const T = {
2018
2083
  anchorRefImage: 'Референс (опционально)',
2019
2084
  anchorRefImageHint: 'Опционально. Загрузите для точной настройки внешности ведущего.',
2020
2085
  scriptText: 'Текст сценария',
2021
- scriptTextPlaceholder: 'Введите текст для ведущего...',
2086
+ scriptTextPlaceholder: 'Приветствуем в выпуске технологических новостей. Первая новость: генерация AI-видео стала бесплатной...',
2022
2087
  resPortraitHD: 'Вертикальное 9:16 (HD)',
2023
2088
  subPositionHints: 'Позиция субтитров',
2024
2089
  subPositionHintsPlaceholder: 'Разместите субтитры в нижней трети, избегая лица ведущего',
@@ -2037,11 +2102,23 @@ const T = {
2037
2102
  aStepConcat: 'Сборка',
2038
2103
  systemPrompt: 'Системный промпт',
2039
2104
  systemPromptPlaceholder: 'Дополнительные инструкции для модели (стиль, качество), не влияют на основной контент',
2105
+ apiKeyGetLink: 'Получить API Key бесплатно',
2106
+ apiKeyGuideLink: 'Инструкция по настройке',
2107
+ apiKeyDemoLink: 'Не хотите настраивать? Онлайн-версия',
2108
+ formTipTips: '🎯 Советы по промптам',
2109
+ formTipModels: '🧠 Сравнение моделей',
2110
+ exampleLinkSimple: '📋 Примеры промптов для простого видео',
2111
+ exampleLinkCreative: '📋 Примеры промптов для креативного видео',
2112
+ exampleLinkManuscript: '📋 Примеры видео из статьи',
2113
+ exampleLinkAnchor: '📋 Примеры цифрового ведущего',
2114
+ waitTip: '💡 Пока ждёте - посмотрите, что создают другие с Agnes',
2115
+ doneTipTiktok: '📈 Идеи для соцсетей',
2116
+ doneTipMore: '🎬 Больше идей для творчества',
2040
2117
  },
2041
2118
  ja: {
2042
2119
  subtitle: 'AI動画、ワンクリック',
2043
2120
  apiKeyTitle: 'API Key 設定', apiKeyNotConfigured: '未設定', apiKeyConfigured: '設定済み',
2044
- apiKeyPlaceholder: 'Agnes API Key を入力', apiKeyMasked: '設定済み (●●●)', save: '保存',
2121
+ apiKeyPlaceholder: 'Agnes API Key を入力(platform.agnes-ai.com で無料取得)', apiKeyMasked: '設定済み (●●●)', save: '保存',
2045
2122
  clear: 'クリア', clearConfirm: '設定済みのAPI Keyを削除しますか?', apiKeyFromEnv: '設定済み (環境変数)',
2046
2123
  clearEnvHint: 'API Keyは環境変数 AGNES_API_KEY で設定されているため、画面から削除できません。',
2047
2124
  modelTitle: 'モデル選択', modelHint: '生成に使用する Agnes モデルを選択します。画像・動画モデルはまだ開放されておらず、既定値が保持されます。',
@@ -2063,7 +2140,7 @@ const T = {
2063
2140
  ttSimple: '画像&動画', ttCreative: 'クリエイティブ動画', ttManuscript: '記事動画',
2064
2141
  subModeLabel: '生成タイプ', subModeVideo: '🎬 動画', subModeImage: '🖼️ 画像',
2065
2142
  simpleSettings: 'シンプル設定', creativeSettings: 'クリエイティブ設定', manuscriptSettings: '記事設定',
2066
- promptLabel: '動画説明', promptPlaceholder: '希望する動画を記述...',
2143
+ promptLabel: '動画説明', promptPlaceholder: '雨上がりの窓辺で昼寝するオレンジの猫、ガラス越しの陽光が毛に当たり、カーテンが風で揺れる、4K フォトリアル',
2067
2144
  genMode: 'モード', modeT2v: 'テキスト→動画', modeI2v: '画像→動画', modeKeyframesSimple: 'キーフレーム',
2068
2145
  duration: '長さ', resolution: '解像度',
2069
2146
  resPortrait: '縦型 9:16', resLandscape: '横型 16:9', resSquare: '正方形 1:1',
@@ -2071,7 +2148,7 @@ const T = {
2071
2148
  chooseImage: '画像を選択', notSelected: '未選択',
2072
2149
  advancedSettings: '詳細設定', optional: '任意', seedPlaceholder: '空欄=ランダム', negativePlaceholder: '除外要素',
2073
2150
  taskName: 'タスク名', taskNamePlaceholder: '任意',
2074
- ideaLabel: 'アイデア', ideaPlaceholder: 'ストーリーを記述...',
2151
+ ideaLabel: 'アイデア', ideaPlaceholder: '廃墟の街で小さな花に水をやるロボット、3つのシーン:芽を見つける→水を運ぶ→花が咲く',
2075
2152
  visualStyle: 'スタイル',
2076
2153
  requirementDefault: '3シーン、各5秒、映画品質', styleDefault: '映画のようなリアルなスタイル',
2077
2154
  chainingMode: '連鎖', modeKeyframes: 'keyframes', modeTi2vid: 'ti2vid', modeNone: 'none',
@@ -2085,7 +2162,7 @@ const T = {
2085
2162
  subStrokeColor: '縁取り色', subStrokeWidth: '縁取り幅', subBgColor: '背景色',
2086
2163
  subStyleMode: 'スタイルモード', subStyleFixed: '固定', subStyleLLM: 'AI スマート',
2087
2164
  subStyleHints: 'スタイル設定', subStyleHintsHint: '字幕のスタイル変化パターンを記述。AIが字幕ごとに位置・色・サイズを割り当てます。',
2088
- manuscriptText: '記事テキスト', manuscriptPlaceholder: '記事を貼り付け...',
2165
+ manuscriptText: '記事テキスト', manuscriptPlaceholder: '記事やプレスリリース、ブログ記事などを貼り付け。例:500字の製品紹介や旅のエッセイ - 自動でシーン分割します',
2089
2166
  charCount: '文字数',
2090
2167
  startGenerate: '生成開始', submitting: '送信中...', taskRunning: '実行中...',
2091
2168
  loading: '読込中...', noTasks: 'タスクなし', loadFailed: '読込失敗',
@@ -2122,7 +2199,7 @@ const T = {
2122
2199
  domainSaved: '保存しました',
2123
2200
  domainSaveFailed: '保存に失敗しました',
2124
2201
  ttImage: '簡単画像', imageSettings: '画像設定',
2125
- imagePrompt: '画像説明', imagePromptPlaceholder: '希望する画像を説明してください...',
2202
+ imagePrompt: '画像説明', imagePromptPlaceholder: '雪を頂く山々のふもとの湖、朝もや、水面に映る山々、映画的な光、横構図',
2126
2203
  imageSize: '画像サイズ', refImageHint: '任意。アップロードしてバリエーションを生成。',
2127
2204
  imgGenerate: '画像生成', imgComplete: '画像生成完了!', generating: '生成中...', enterImagePrompt: '画像の説明を入力してください',
2128
2205
  anchorSettings: 'アンカー設定',
@@ -2131,7 +2208,7 @@ const T = {
2131
2208
  anchorRefImage: '参照画像 (任意)',
2132
2209
  anchorRefImageHint: '任意。アンカーの外見を微調整するためにアップロード。',
2133
2210
  scriptText: '原稿テキスト',
2134
- scriptTextPlaceholder: 'アンカーが読み上げる原稿を入力...',
2211
+ scriptTextPlaceholder: 'こんにちは、今日のテックニュースです。最初のニュース:AI動画生成が無料の時代に突入しました……',
2135
2212
  resPortraitHD: '縦型 9:16 (HD)',
2136
2213
  subPositionHints: '字幕位置の指定',
2137
2214
  subPositionHintsPlaceholder: '字幕は画面下部3分の1に配置、アンカーの顔を隠さないように',
@@ -2150,11 +2227,23 @@ const T = {
2150
2227
  aStepConcat: '動画結合',
2151
2228
  systemPrompt: 'システムプロンプト',
2152
2229
  systemPromptPlaceholder: 'モデルへの追加指示(スタイル、品質など)。生成内容の主体には影響しません',
2230
+ apiKeyGetLink: '無料で API Key を取得',
2231
+ apiKeyGuideLink: '設定チュートリアル',
2232
+ apiKeyDemoLink: '設定したくない?オンライン体験',
2233
+ formTipTips: '🎯 プロンプトのコツ',
2234
+ formTipModels: '🧠 モデル比較',
2235
+ exampleLinkSimple: '📋 シンプル動画のプロンプト例',
2236
+ exampleLinkCreative: '📋 クリエイティブ動画のプロンプト例',
2237
+ exampleLinkManuscript: '📋 記事動画の例',
2238
+ exampleLinkAnchor: '📋 デジタルアンカーの例',
2239
+ waitTip: '💡 待っている間に、Agnes で作られた作品を見てみませんか',
2240
+ doneTipTiktok: '📈 SNS 活用術',
2241
+ doneTipMore: '🎬 もっと創作アイデア',
2153
2242
  },
2154
2243
  ko: {
2155
2244
  subtitle: 'AI 영상, 원클릭',
2156
2245
  apiKeyTitle: 'API Key 설정', apiKeyNotConfigured: '미설정', apiKeyConfigured: '설정됨',
2157
- apiKeyPlaceholder: 'Agnes API Key 입력', apiKeyMasked: '설정됨 (●●●)', save: '저장',
2246
+ apiKeyPlaceholder: 'Agnes API Key 입력 (platform.agnes-ai.com에서 무료 발급)', apiKeyMasked: '설정됨 (●●●)', save: '저장',
2158
2247
  clear: '초기화', clearConfirm: '설정된 API Key를 삭제하시겠습니까?', apiKeyFromEnv: '설정됨 (환경변수)',
2159
2248
  clearEnvHint: 'API Key가 환경변수 AGNES_API_KEY로 설정되어 있어 화면에서 삭제할 수 없습니다.',
2160
2249
  modelTitle: '모델 선택', modelHint: '생성에 사용할 Agnes 모델을 선택하세요. 이미지 및 비디오 모델은 아직 공개되지 않았으며 기본값이 유지됩니다.',
@@ -2176,7 +2265,7 @@ const T = {
2176
2265
  ttSimple: '이미지 & 영상', ttCreative: '크리에이티브 영상', ttManuscript: '기사 영상',
2177
2266
  subModeLabel: '생성 유형', subModeVideo: '🎬 영상', subModeImage: '🖼️ 이미지',
2178
2267
  simpleSettings: '간단 설정', creativeSettings: '크리에이티브 설정', manuscriptSettings: '기사 설정',
2179
- promptLabel: '영상 설명', promptPlaceholder: '원하는 영상을 설명하세요...',
2268
+ promptLabel: '영상 설명', promptPlaceholder: '비 온 뒤 창가에서 낮잠 자는 주황색 고양이, 유리창 너머 햇살이 털에 닿고 커튼이 바람에 흔들림, 4K 실사',
2180
2269
  genMode: '모드', modeT2v: '텍스트→영상', modeI2v: '이미지→영상', modeKeyframesSimple: '키프레임',
2181
2270
  duration: '길이', resolution: '해상도',
2182
2271
  resPortrait: '세로 9:16', resLandscape: '가로 16:9', resSquare: '정사각 1:1',
@@ -2184,7 +2273,7 @@ const T = {
2184
2273
  chooseImage: '이미지 선택', notSelected: '미선택',
2185
2274
  advancedSettings: '고급 설정', optional: '선택', seedPlaceholder: '비우기=랜덤', negativePlaceholder: '제외 요소',
2186
2275
  taskName: '작업 이름', taskNamePlaceholder: '선택사항',
2187
- ideaLabel: '아이디어', ideaPlaceholder: '스토리를 설명하세요...',
2276
+ ideaLabel: '아이디어', ideaPlaceholder: '폐허가 된 도시에서 작은 꽃에 물을 주는 로봇, 3개 장면: 새싹 발견 → 물 가져오기 → 꽃이 핌',
2188
2277
  visualStyle: '스타일',
2189
2278
  requirementDefault: '3개 장면, 각 5초, 영화 품질', styleDefault: '영화 같은 사실적인 스타일',
2190
2279
  chainingMode: '체인', modeKeyframes: 'keyframes', modeTi2vid: 'ti2vid', modeNone: 'none',
@@ -2198,7 +2287,7 @@ const T = {
2198
2287
  subStrokeColor: '테두리 색', subStrokeWidth: '테두리 두께', subBgColor: '배경 색',
2199
2288
  subStyleMode: '스타일 모드', subStyleFixed: '고정', subStyleLLM: 'AI 스마트',
2200
2289
  subStyleHints: '스타일 설정', subStyleHintsHint: '자막 스타일 변화 패턴을 설명하세요. AI가 각 자막의 위치, 색상, 크기를 할당합니다.',
2201
- manuscriptText: '기사 텍스트', manuscriptPlaceholder: '기사를 붙여넣기...',
2290
+ manuscriptText: '기사 텍스트', manuscriptPlaceholder: '기사, 보도자료, 블로그 글 등을 붙여넣으세요. 예: 500자 제품 소개나 여행 에세이 - 자동으로 장면을 나눠줍니다',
2202
2291
  charCount: '글자 수',
2203
2292
  startGenerate: '생성 시작', submitting: '제출 중...', taskRunning: '실행 중...',
2204
2293
  loading: '로딩...', noTasks: '작업 없음', loadFailed: '로딩 실패',
@@ -2235,7 +2324,7 @@ const T = {
2235
2324
  domainSaved: '저장됨',
2236
2325
  domainSaveFailed: '저장 실패',
2237
2326
  ttImage: '간단 이미지', imageSettings: '이미지 설정',
2238
- imagePrompt: '이미지 설명', imagePromptPlaceholder: '원하는 이미지를 설명하세요...',
2327
+ imagePrompt: '이미지 설명', imagePromptPlaceholder: '눈 덮인 산 아래 호수, 새벽 안개, 수면에 비친 산, 영화적 조명, 가로 구도',
2239
2328
  imageSize: '이미지 크기', refImageHint: '선택사항. 업로드하여 변형을 생성합니다.',
2240
2329
  imgGenerate: '이미지 생성', imgComplete: '이미지 생성 완료!', generating: '생성 중...', enterImagePrompt: '이미지 설명을 입력하세요',
2241
2330
  anchorSettings: '앵커 설정',
@@ -2244,7 +2333,7 @@ const T = {
2244
2333
  anchorRefImage: '참조 이미지 (선택)',
2245
2334
  anchorRefImageHint: '선택사항. 앵커 외형을 미세 조정하려면 업로드하세요.',
2246
2335
  scriptText: '대본 텍스트',
2247
- scriptTextPlaceholder: '앵커가 읽을 대본을 입력하세요...',
2336
+ scriptTextPlaceholder: '오늘의 테크 뉴스를 시작합니다. 첫 번째 소식: AI 영상 생성이 무료 시대에 접어들었습니다……',
2248
2337
  resPortraitHD: '세로 9:16 (HD)',
2249
2338
  subPositionHints: '자막 위치 힌트',
2250
2339
  subPositionHintsPlaceholder: '자막을 화면 하단 1/3에 배치하고 앵커 얼굴을 가리지 않도록 하세요',
@@ -2263,11 +2352,23 @@ const T = {
2263
2352
  aStepConcat: '비디오 결합',
2264
2353
  systemPrompt: '시스템 프롬프트',
2265
2354
  systemPromptPlaceholder: '모델에 대한 추가 지침(스타일, 품질 등). 생성 내용의 주제에는 영향을 미치지 않습니다',
2355
+ apiKeyGetLink: '무료로 API Key 받기',
2356
+ apiKeyGuideLink: '설정 가이드',
2357
+ apiKeyDemoLink: '설정하기 싫으세요? 온라인 체험',
2358
+ formTipTips: '🎯 프롬프트 팁',
2359
+ formTipModels: '🧠 모델 비교',
2360
+ exampleLinkSimple: '📋 심플 영상 프롬프트 예시',
2361
+ exampleLinkCreative: '📋 크리에이티브 영상 프롬프트 예시',
2362
+ exampleLinkManuscript: '📋 기사 영상 예시',
2363
+ exampleLinkAnchor: '📋 디지털 앵커 예시',
2364
+ waitTip: '💡 기다리는 동안 Agnes로 만든 작품을 구경해 보세요',
2365
+ doneTipTiktok: '📈 SNS 활용법',
2366
+ doneTipMore: '🎬 더 많은 창작 아이디어',
2266
2367
  },
2267
2368
  ms: {
2268
2369
  subtitle: 'Video AI, Satu Klik',
2269
2370
  apiKeyTitle: 'API Key', apiKeyNotConfigured: 'Belum', apiKeyConfigured: 'Sudah',
2270
- apiKeyPlaceholder: 'Masukkan Agnes API Key', apiKeyMasked: 'Sudah (●●●)', save: 'Simpan',
2371
+ apiKeyPlaceholder: 'Masukkan Agnes API Key (dapatkan percuma di platform.agnes-ai.com)', apiKeyMasked: 'Sudah (●●●)', save: 'Simpan',
2271
2372
  clear: 'Padam', clearConfirm: 'Pasti mahu padam API Key?', apiKeyFromEnv: 'Sudah (env)',
2272
2373
  clearEnvHint: 'API Key ditetapkan melalui pembolehubah AGNES_API_KEY dan tidak boleh dipadam dari UI.',
2273
2374
  modelTitle: 'Pemilihan Model', modelHint: 'Pilih model Agnes yang digunakan untuk penjanaan. Model imej dan video belum dibuka; nilai lalai kekal.',
@@ -2289,7 +2390,7 @@ const T = {
2289
2390
  ttSimple: 'Imej & Video', ttCreative: 'Video Kreatif', ttManuscript: 'Video Artikel',
2290
2391
  subModeLabel: 'Jenis', subModeVideo: '🎬 Video', subModeImage: '🖼️ Imej',
2291
2392
  simpleSettings: 'Tetapan Ringkas', creativeSettings: 'Tetapan Kreatif', manuscriptSettings: 'Tetapan Artikel',
2292
- promptLabel: 'Penerangan Video', promptPlaceholder: 'Terangkan video yang diingini...',
2393
+ promptLabel: 'Penerangan Video', promptPlaceholder: 'Seekor kucing oren tidur di tepi tingkap selepas hujan, cahaya matahari menyinari bulunya, langsir berayun ditiup angin, 4K realistik',
2293
2394
  genMode: 'Mod', modeT2v: 'Teks ke Video', modeI2v: 'Imej ke Video', modeKeyframesSimple: 'Bingkai Kunci',
2294
2395
  duration: 'Tempoh', resolution: 'Resolusi',
2295
2396
  resPortrait: 'Potret 9:16', resLandscape: 'Landskap 16:9', resSquare: 'Segi Empat 1:1',
@@ -2297,7 +2398,7 @@ const T = {
2297
2398
  chooseImage: 'Pilih Imej', notSelected: 'Tidak dipilih',
2298
2399
  advancedSettings: 'Tetapan Lanjutan', optional: 'Pilihan', seedPlaceholder: 'Kosong=rawak', negativePlaceholder: 'Kecualikan elemen',
2299
2400
  taskName: 'Nama Tugas', taskNamePlaceholder: 'Pilihan',
2300
- ideaLabel: 'Idea', ideaPlaceholder: 'Terangkan cerita anda...',
2401
+ ideaLabel: 'Idea', ideaPlaceholder: 'Robot menyiram bunga kecil di bandar terbiar, 3 babak: menjumpai anak pokok, membawa air, bunga mekar',
2301
2402
  visualStyle: 'Gaya',
2302
2403
  requirementDefault: '3 babak, 5 saat setiap satu, kualiti sinematik', styleDefault: 'gaya realistik sinematik',
2303
2404
  chainingMode: 'Rantai', modeKeyframes: 'keyframes', modeTi2vid: 'ti2vid', modeNone: 'none',
@@ -2311,7 +2412,7 @@ const T = {
2311
2412
  subStrokeColor: 'Warna Garis', subStrokeWidth: 'Lebar Garis', subBgColor: 'Warna Latar',
2312
2413
  subStyleMode: 'Mod Gaya', subStyleFixed: 'Tetap', subStyleLLM: 'AI Pintar',
2313
2414
  subStyleHints: 'Keutamaan Gaya', subStyleHintsHint: 'Terangkan corak perubahan gaya sarikata. AI akan tetapkan kedudukan, warna dan saiz bagi setiap sarikata.',
2314
- manuscriptText: 'Teks Artikel', manuscriptPlaceholder: 'Tampal artikel anda...',
2415
+ manuscriptText: 'Teks Artikel', manuscriptPlaceholder: 'Tampal artikel, siaran akhbar atau catatan blog. Contoh: pengenalan produk 500 patah perkataan atau catatan perjalanan - sistem akan membahagikannya kepada babak secara automatik',
2315
2416
  charCount: 'Aksara',
2316
2417
  startGenerate: 'Mula Hasilkan', submitting: 'Menghantar...', taskRunning: 'Berjalan...',
2317
2418
  loading: 'Memuat...', noTasks: 'Tiada tugas', loadFailed: 'Gagal memuat',
@@ -2348,7 +2449,7 @@ const T = {
2348
2449
  domainSaved: 'Disimpan',
2349
2450
  domainSaveFailed: 'Gagal simpan',
2350
2451
  ttImage: 'Imej Ringkas', imageSettings: 'Tetapan Imej',
2351
- imagePrompt: 'Penerangan Imej', imagePromptPlaceholder: 'Huraikan imej yang anda mahukan...',
2452
+ imagePrompt: 'Penerangan Imej', imagePromptPlaceholder: 'Tasik di kaki gunung bersalji, kabus pagi, gunung terpantul di permukaan air, pencahayaan sinematik, orientasi landskap',
2352
2453
  imageSize: 'Saiz Imej', refImageHint: 'Pilihan. Muat naik untuk hasilkan variasi.',
2353
2454
  imgGenerate: 'Hasilkan Imej', imgComplete: 'Imej dihasilkan!', generating: 'Menghasilkan...', enterImagePrompt: 'Sila masukkan penerangan imej',
2354
2455
  anchorSettings: 'Tetapan Penyampai',
@@ -2357,7 +2458,7 @@ const T = {
2357
2458
  anchorRefImage: 'Imej Rujukan (Pilihan)',
2358
2459
  anchorRefImageHint: 'Pilihan. Muat naik untuk memperhalus penampilan penyampai.',
2359
2460
  scriptText: 'Teks Skrip',
2360
- scriptTextPlaceholder: 'Masukkan teks untuk dibaca oleh penyampai...',
2461
+ scriptTextPlaceholder: 'Selamat datang ke buletin teknologi hari ini. Berita pertama: penjanaan video AI telah memasuki era percuma……',
2361
2462
  resPortraitHD: 'Potret 9:16 (HD)',
2362
2463
  subPositionHints: 'Petunjuk Kedudukan Sarikata',
2363
2464
  subPositionHintsPlaceholder: 'Letakkan sarikata di bahagian bawah skrin, elakkan menutup muka penyampai',
@@ -2376,11 +2477,23 @@ const T = {
2376
2477
  aStepConcat: 'Gabung Video',
2377
2478
  systemPrompt: 'Arahan Sistem',
2378
2479
  systemPromptPlaceholder: 'Arahan tambahan untuk model (cth. gaya, kualiti). Tidak menjejaskan penerangan kandungan utama',
2480
+ apiKeyGetLink: 'Dapatkan API Key percuma',
2481
+ apiKeyGuideLink: 'Panduan persediaan',
2482
+ apiKeyDemoLink: 'Tak mahu sediakan? Cuba dalam talian',
2483
+ formTipTips: '🎯 Tip prompt',
2484
+ formTipModels: '🧠 Perbandingan model',
2485
+ exampleLinkSimple: '📋 Contoh prompt video ringkas',
2486
+ exampleLinkCreative: '📋 Contoh prompt video kreatif',
2487
+ exampleLinkManuscript: '📋 Contoh video artikel',
2488
+ exampleLinkAnchor: '📋 Contoh penyampai digital',
2489
+ waitTip: '💡 Sementara menunggu, lihat hasil karya orang lain dengan Agnes',
2490
+ doneTipTiktok: '📈 Panduan media sosial',
2491
+ doneTipMore: '🎬 Lebih banyak idea kreatif',
2379
2492
  },
2380
2493
  id: {
2381
2494
  subtitle: 'Video AI, Satu Klik',
2382
2495
  apiKeyTitle: 'API Key', apiKeyNotConfigured: 'Belum', apiKeyConfigured: 'Sudah',
2383
- apiKeyPlaceholder: 'Masukkan Agnes API Key', apiKeyMasked: 'Sudah (●●●)', save: 'Simpan',
2496
+ apiKeyPlaceholder: 'Masukkan Agnes API Key (gratis di platform.agnes-ai.com)', apiKeyMasked: 'Sudah (●●●)', save: 'Simpan',
2384
2497
  clear: 'Hapus', clearConfirm: 'Yakin ingin menghapus API Key?', apiKeyFromEnv: 'Sudah (env)',
2385
2498
  clearEnvHint: 'API Key diatur melalui variabel AGNES_API_KEY dan tidak dapat dihapus dari UI.',
2386
2499
  modelTitle: 'Pemilihan Model', modelHint: 'Pilih model Agnes yang digunakan untuk pembuatan. Model gambar dan video belum dibuka; nilai default dipertahankan.',
@@ -2402,7 +2515,7 @@ const T = {
2402
2515
  ttSimple: 'Gambar & Video', ttCreative: 'Video Kreatif', ttManuscript: 'Video Artikel',
2403
2516
  subModeLabel: 'Jenis', subModeVideo: '🎬 Video', subModeImage: '🖼️ Gambar',
2404
2517
  simpleSettings: 'Pengaturan Simpel', creativeSettings: 'Pengaturan Kreatif', manuscriptSettings: 'Pengaturan Artikel',
2405
- promptLabel: 'Deskripsi Video', promptPlaceholder: 'Jelaskan video yang diinginkan...',
2518
+ promptLabel: 'Deskripsi Video', promptPlaceholder: 'Seekor kucing oranye tidur di ambang jendela setelah hujan, sinar matahari menembus kaca menyinari bulunya, tirai bergoyang tertiup angin, 4K realistis',
2406
2519
  genMode: 'Mode', modeT2v: 'Teks ke Video', modeI2v: 'Gambar ke Video', modeKeyframesSimple: 'Keyframe',
2407
2520
  duration: 'Durasi', resolution: 'Resolusi',
2408
2521
  resPortrait: 'Potret 9:16', resLandscape: 'Lanskap 16:9', resSquare: 'Persegi 1:1',
@@ -2410,7 +2523,7 @@ const T = {
2410
2523
  chooseImage: 'Pilih Gambar', notSelected: 'Belum dipilih',
2411
2524
  advancedSettings: 'Pengaturan Lanjutan', optional: 'Opsional', seedPlaceholder: 'Kosong=acak', negativePlaceholder: 'Kecualikan elemen',
2412
2525
  taskName: 'Nama Tugas', taskNamePlaceholder: 'Opsional',
2413
- ideaLabel: 'Ide', ideaPlaceholder: 'Jelaskan cerita Anda...',
2526
+ ideaLabel: 'Ide', ideaPlaceholder: 'Robot menyiram bunga kecil di kota terbengkalai, 3 adegan: menemukan tunas, mengambil air, bunga mekar',
2414
2527
  visualStyle: 'Gaya',
2415
2528
  requirementDefault: '3 adegan, masing-masing 5 detik, kualitas sinematik', styleDefault: 'gaya realistis sinematik',
2416
2529
  chainingMode: 'Rantai', modeKeyframes: 'keyframes', modeTi2vid: 'ti2vid', modeNone: 'none',
@@ -2423,7 +2536,7 @@ const T = {
2423
2536
  subStrokeColor: 'Warna Garis', subStrokeWidth: 'Lebar Garis', subBgColor: 'Warna Latar',
2424
2537
  subStyleMode: 'Mode Gaya', subStyleFixed: 'Tetap', subStyleLLM: 'AI Pintar',
2425
2538
  subStyleHints: 'Preferensi Gaya', subStyleHintsHint: 'Jelaskan pola perubahan gaya subtitle. AI akan menetapkan posisi, warna, dan ukuran untuk setiap subtitle.',
2426
- manuscriptText: 'Teks Artikel', manuscriptPlaceholder: 'Tempel artikel Anda...',
2539
+ manuscriptText: 'Teks Artikel', manuscriptPlaceholder: 'Tempel artikel, siaran pers atau posting blog. Contoh: pengenalan produk 500 kata atau catatan perjalanan - sistem akan memecahnya menjadi adegan secara otomatis',
2427
2540
  charCount: 'Karakter',
2428
2541
  startGenerate: 'Mulai Hasilkan', submitting: 'Mengirim...', taskRunning: 'Berjalan...',
2429
2542
  loading: 'Memuat...', noTasks: 'Tidak ada tugas', loadFailed: 'Gagal memuat',
@@ -2460,7 +2573,7 @@ const T = {
2460
2573
  domainSaved: 'Disimpan',
2461
2574
  domainSaveFailed: 'Gagal simpan',
2462
2575
  ttImage: 'Gambar Sederhana', imageSettings: 'Pengaturan Gambar',
2463
- imagePrompt: 'Deskripsi Gambar', imagePromptPlaceholder: 'Jelaskan gambar yang Anda inginkan...',
2576
+ imagePrompt: 'Deskripsi Gambar', imagePromptPlaceholder: 'Danau di kaki gunung bersalju, kabut pagi, gunung terpantul di permukaan air, pencahayaan sinematik, komposisi horizontal',
2464
2577
  imageSize: 'Ukuran Gambar', refImageHint: 'Opsional. Unggah untuk menghasilkan variasi.',
2465
2578
  imgGenerate: 'Hasilkan Gambar', imgComplete: 'Gambar selesai!', generating: 'Sedang menghasilkan...', enterImagePrompt: 'Silakan masukkan deskripsi gambar',
2466
2579
  anchorSettings: 'Pengaturan Pembawa Acara',
@@ -2469,7 +2582,7 @@ const T = {
2469
2582
  anchorRefImage: 'Gambar Referensi (Opsional)',
2470
2583
  anchorRefImageHint: 'Opsional. Unggah untuk menyesuaikan penampilan pembawa acara.',
2471
2584
  scriptText: 'Teks Naskah',
2472
- scriptTextPlaceholder: 'Masukkan naskah untuk dibacakan pembawa acara...',
2585
+ scriptTextPlaceholder: 'Selamat datang di buletin teknologi hari ini. Berita pertama: pembuatan video AI telah memasuki era gratis……',
2473
2586
  resPortraitHD: 'Potret 9:16 (HD)',
2474
2587
  subPositionHints: 'Petunjuk Posisi Subtitle',
2475
2588
  subPositionHintsPlaceholder: 'Tempatkan subtitle di sepertiga bawah layar, hindari menutupi wajah pembawa acara',
@@ -2488,11 +2601,23 @@ const T = {
2488
2601
  aStepConcat: 'Gabung Video',
2489
2602
  systemPrompt: 'Prompt Sistem',
2490
2603
  systemPromptPlaceholder: 'Instruksi tambahan untuk model (mis. gaya, kualitas). Tidak mempengaruhi subjek deskripsi konten',
2604
+ apiKeyGetLink: 'Dapatkan API Key gratis',
2605
+ apiKeyGuideLink: 'Panduan konfigurasi',
2606
+ apiKeyDemoLink: 'Tidak mau konfigurasi? Coba online',
2607
+ formTipTips: '🎯 Tips prompt',
2608
+ formTipModels: '🧠 Perbandingan model',
2609
+ exampleLinkSimple: '📋 Contoh prompt video sederhana',
2610
+ exampleLinkCreative: '📋 Contoh prompt video kreatif',
2611
+ exampleLinkManuscript: '📋 Contoh video artikel',
2612
+ exampleLinkAnchor: '📋 Contoh pembawa acara digital',
2613
+ waitTip: '💡 Sambil menunggu, lihat karya orang lain dengan Agnes',
2614
+ doneTipTiktok: '📈 Panduan media sosial',
2615
+ doneTipMore: '🎬 Lebih banyak ide kreatif',
2491
2616
  },
2492
2617
  de: {
2493
2618
  subtitle: 'KI-Video, ein Klick',
2494
2619
  apiKeyTitle: 'API-Key', apiKeyNotConfigured: 'Nicht konfiguriert', apiKeyConfigured: 'Konfiguriert',
2495
- apiKeyPlaceholder: 'Agnes API-Key eingeben', apiKeyMasked: 'Konfiguriert (●●●)', save: 'Speichern',
2620
+ apiKeyPlaceholder: 'Agnes API Key eingeben (kostenlos auf platform.agnes-ai.com)', apiKeyMasked: 'Konfiguriert (●●●)', save: 'Speichern',
2496
2621
  clear: 'Löschen', clearConfirm: 'API-Key wirklich löschen?', apiKeyFromEnv: 'Konfiguriert (env)',
2497
2622
  clearEnvHint: 'Der API-Key ist über die Umgebungsvariable AGNES_API_KEY gesetzt und kann nicht aus der UI gelöscht werden.',
2498
2623
  modelTitle: 'Modellauswahl', modelHint: 'Wählen Sie die für die Generierung verwendeten Agnes-Modelle. Bild- und Video-Modelle sind noch nicht geöffnet; ihre Standardwerte bleiben erhalten.',
@@ -2514,7 +2639,7 @@ const T = {
2514
2639
  ttSimple: 'Bild & Video', ttCreative: 'Kreatives Video', ttManuscript: 'Artikel-Video',
2515
2640
  subModeLabel: 'Typ', subModeVideo: '🎬 Video', subModeImage: '🖼️ Bild',
2516
2641
  simpleSettings: 'Einfache Einstellungen', creativeSettings: 'Kreative Einstellungen', manuscriptSettings: 'Artikel-Einstellungen',
2517
- promptLabel: 'Videobeschreibung', promptPlaceholder: 'Gewünschtes Video beschreiben...',
2642
+ promptLabel: 'Videobeschreibung', promptPlaceholder: 'Eine orange Katze döst am Fensterbrett nach dem Regen, Sonnenlicht fällt durchs Glas auf ihr Fell, der Vorhang weht im Wind, 4K fotorealistisch',
2518
2643
  genMode: 'Modus', modeT2v: 'Text zu Video', modeI2v: 'Bild zu Video', modeKeyframesSimple: 'Keyframes',
2519
2644
  duration: 'Dauer', resolution: 'Auflösung',
2520
2645
  resPortrait: 'Hochformat 9:16', resLandscape: 'Querformat 16:9', resSquare: 'Quadrat 1:1',
@@ -2522,7 +2647,7 @@ const T = {
2522
2647
  chooseImage: 'Bild auswählen', notSelected: 'Nicht ausgewählt',
2523
2648
  advancedSettings: 'Erweiterte Einstellungen', optional: 'Optional', seedPlaceholder: 'Leer lassen für Zufall', negativePlaceholder: 'Auszuschließende Elemente',
2524
2649
  taskName: 'Aufgabenname', taskNamePlaceholder: 'Optional, automatisch generiert wenn leer',
2525
- ideaLabel: 'Idee', ideaPlaceholder: 'Geschichte, Szenen und Charaktere beschreiben...',
2650
+ ideaLabel: 'Idee', ideaPlaceholder: 'Ein Roboter gießt eine kleine Blume in einer verlassenen Stadt, 3 Szenen: Keimling entdecken, Wasser holen, Blume blüht',
2526
2651
  visualStyle: 'Visueller Stil',
2527
2652
  requirementDefault: '3 Szenen, je 5 Sekunden, Kinoqualität', styleDefault: 'Kinorealistischer Stil',
2528
2653
  chainingMode: 'Verkettungsmodus', modeKeyframes: 'keyframes (empfohlen)', modeTi2vid: 'ti2vid (Übergang)', modeNone: 'none (unabhängig)',
@@ -2536,7 +2661,7 @@ const T = {
2536
2661
  subStrokeColor: 'Randfarbe', subStrokeWidth: 'Randbreite', subBgColor: 'Hintergrundfarbe',
2537
2662
  subStyleMode: 'Stilmodus', subStyleFixed: 'Fest', subStyleLLM: 'KI Smart',
2538
2663
  subStyleHints: 'Stileinstellungen', subStyleHintsHint: 'Beschreiben, wie Untertitel variieren sollen. KI weist jedem Untertitel Position, Farbe und Größe zu.',
2539
- manuscriptText: 'Artikeltext', manuscriptPlaceholder: 'Artikel, Nachrichten, Blogbeitrag einfügen...',
2664
+ manuscriptText: 'Artikeltext', manuscriptPlaceholder: 'Artikel, Pressemitteilung oder Blogbeitrag einfügen. Beispiel: eine Produktvorstellung mit 500 Wörtern oder ein Reisebericht - das System teilt den Text automatisch in Szenen',
2540
2665
  charCount: 'Zeichen',
2541
2666
  startGenerate: 'Generierung starten', submitting: 'Senden...', taskRunning: 'Aufgabe läuft...',
2542
2667
  loading: 'Laden...', noTasks: 'Keine Aufgaben', loadFailed: 'Laden fehlgeschlagen',
@@ -2578,7 +2703,7 @@ const T = {
2578
2703
  domainSaved: 'Gespeichert',
2579
2704
  domainSaveFailed: 'Speichern fehlgeschlagen',
2580
2705
  ttImage: 'Einfaches Bild', imageSettings: 'Bildeinstellungen',
2581
- imagePrompt: 'Bildbeschreibung', imagePromptPlaceholder: 'Gewünschtes Bild beschreiben...',
2706
+ imagePrompt: 'Bildbeschreibung', imagePromptPlaceholder: 'Ein See am Fuß verschneiter Berge, Morgennebel, Berge spiegeln sich im Wasser, filmisches Licht, Querformat',
2582
2707
  imageSize: 'Bildgröße', refImageHint: 'Optional. Hochladen für Varianten; leer lassen für reine KI-Generierung.',
2583
2708
  imgGenerate: 'Bild generieren', imgComplete: 'Bild generiert!', generating: 'Generierung...', enterImagePrompt: 'Bildbeschreibung eingeben',
2584
2709
  anchorSettings: 'Digitaler-Mensch-Einstellungen',
@@ -2587,7 +2712,7 @@ const T = {
2587
2712
  anchorRefImage: 'Referenzbild (Optional)',
2588
2713
  anchorRefImageHint: 'Optional. Hochladen zur Feinabstimmung; leer lassen für reine KI-Generierung.',
2589
2714
  scriptText: 'Skripttext',
2590
- scriptTextPlaceholder: 'Skript zum Vorlesen eingeben...',
2715
+ scriptTextPlaceholder: 'Willkommen zum Technik-Nachrichtenüberblick. Erste Meldung: KI-Videogenerierung ist jetzt kostenlos...',
2591
2716
  resPortraitHD: 'Hochformat 9:16 (HD)',
2592
2717
  subPositionHints: 'Hinweise zur Untertitelposition',
2593
2718
  subPositionHintsPlaceholder: 'Untertitel im unteren Drittel platzieren, Gesicht des Sprechers nicht verdecken',
@@ -2606,11 +2731,23 @@ const T = {
2606
2731
  aStepConcat: 'Video-Zusammenfügung',
2607
2732
  systemPrompt: 'System-Prompt',
2608
2733
  systemPromptPlaceholder: 'Zusätzliche Anweisungen für das Modell (z.B. Stil, Qualität). Beeinflusst nicht die Inhaltsbeschreibung',
2734
+ apiKeyGetLink: 'API Key kostenlos erhalten',
2735
+ apiKeyGuideLink: 'Einrichtungsanleitung',
2736
+ apiKeyDemoLink: 'Keine Lust auf Einrichtung? Online testen',
2737
+ formTipTips: '🎯 Prompt-Tipps',
2738
+ formTipModels: '🧠 Modellvergleich',
2739
+ exampleLinkSimple: '📋 Einfache Video-Prompt-Beispiele',
2740
+ exampleLinkCreative: '📋 Kreative Video-Prompt-Beispiele',
2741
+ exampleLinkManuscript: '📋 Artikel-Video-Beispiele',
2742
+ exampleLinkAnchor: '📋 Beispiele für digitalen Moderator',
2743
+ waitTip: '💡 Schauen Sie während des Wartens, was andere mit Agnes erstellen',
2744
+ doneTipTiktok: '📈 Social-Media-Tipps',
2745
+ doneTipMore: '🎬 Weitere Ideen',
2609
2746
  },
2610
2747
  fr: {
2611
2748
  subtitle: 'Vidéo IA, un clic',
2612
2749
  apiKeyTitle: 'Clé API', apiKeyNotConfigured: 'Non configuré', apiKeyConfigured: 'Configuré',
2613
- apiKeyPlaceholder: 'Entrez la clé API Agnes', apiKeyMasked: 'Configuré (●●●)', save: 'Enregistrer',
2750
+ apiKeyPlaceholder: 'Saisissez votre Agnes API Key (gratuit sur platform.agnes-ai.com)', apiKeyMasked: 'Configuré (●●●)', save: 'Enregistrer',
2614
2751
  clear: 'Effacer', clearConfirm: 'Voulez-vous vraiment supprimer la clé API ?', apiKeyFromEnv: 'Configuré (env)',
2615
2752
  clearEnvHint: 'La clé API est définie via la variable AGNES_API_KEY et ne peut pas être supprimée depuis l\'interface.',
2616
2753
  modelTitle: 'Sélection du modèle', modelHint: 'Choisissez les modèles Agnes utilisés pour la génération. Les modèles image et vidéo ne sont pas encore ouverts ; leurs valeurs par défaut sont conservées.',
@@ -2632,7 +2769,7 @@ const T = {
2632
2769
  ttSimple: 'Image & Vidéo', ttCreative: 'Vidéo créative', ttManuscript: 'Vidéo article',
2633
2770
  subModeLabel: 'Type', subModeVideo: '🎬 Vidéo', subModeImage: '🖼️ Image',
2634
2771
  simpleSettings: 'Paramètres simples', creativeSettings: 'Paramètres créatifs', manuscriptSettings: 'Paramètres article',
2635
- promptLabel: 'Description vidéo', promptPlaceholder: 'Décrivez la vidéo souhaitée...',
2772
+ promptLabel: 'Description vidéo', promptPlaceholder: 'Un chat roux somnole sur le rebord de la fenêtre après la pluie, le soleil traverse la vitre, le rideau bouge dans le vent, 4K photoréaliste',
2636
2773
  genMode: 'Mode', modeT2v: 'Texte vers vidéo', modeI2v: 'Image vers vidéo', modeKeyframesSimple: 'Images clés',
2637
2774
  duration: 'Durée', resolution: 'Résolution',
2638
2775
  resPortrait: 'Portrait 9:16', resLandscape: 'Paysage 16:9', resSquare: 'Carré 1:1',
@@ -2640,7 +2777,7 @@ const T = {
2640
2777
  chooseImage: 'Choisir une image', notSelected: 'Non sélectionné',
2641
2778
  advancedSettings: 'Paramètres avancés', optional: 'Optionnel', seedPlaceholder: 'Laisser vide = aléatoire', negativePlaceholder: 'Éléments à exclure',
2642
2779
  taskName: 'Nom de la tâche', taskNamePlaceholder: 'Optionnel, généré automatiquement si vide',
2643
- ideaLabel: 'Idée', ideaPlaceholder: 'Décrivez votre histoire, scènes et personnages...',
2780
+ ideaLabel: 'Idée', ideaPlaceholder: 'Un robot arrose une petite fleur dans une ville abandonnée, 3 scènes : découvrir la pousse, apporter l\'eau, la fleur s\'épanouit',
2644
2781
  visualStyle: 'Style visuel',
2645
2782
  requirementDefault: '3 scènes, 5 secondes chacune, qualité cinéma', styleDefault: 'style réaliste cinématographique',
2646
2783
  chainingMode: 'Mode de chaînage', modeKeyframes: 'keyframes (recommandé)', modeTi2vid: 'ti2vid (transition)', modeNone: 'none (indépendant)',
@@ -2654,7 +2791,7 @@ const T = {
2654
2791
  subStrokeColor: 'Couleur contour', subStrokeWidth: 'Largeur contour', subBgColor: 'Couleur fond',
2655
2792
  subStyleMode: 'Mode style', subStyleFixed: 'Fixe', subStyleLLM: 'IA intelligente',
2656
2793
  subStyleHints: 'Préférences de style', subStyleHintsHint: 'Décrire comment les sous-titres varient. L\'IA attribue position, couleur et taille à chaque sous-titre.',
2657
- manuscriptText: 'Texte de l\'article', manuscriptPlaceholder: 'Collez votre article, actualité, billet de blog...',
2794
+ manuscriptText: 'Texte de l\'article', manuscriptPlaceholder: 'Collez votre article, communiqué de presse ou article de blog. Exemple : une présentation produit de 500 mots ou un récit de voyage - le système découpe automatiquement en scènes',
2658
2795
  charCount: 'Caractères',
2659
2796
  startGenerate: 'Lancer la génération', submitting: 'Envoi...', taskRunning: 'Tâche en cours...',
2660
2797
  loading: 'Chargement...', noTasks: 'Aucune tâche', loadFailed: 'Échec du chargement',
@@ -2696,7 +2833,7 @@ const T = {
2696
2833
  domainSaved: 'Enregistré',
2697
2834
  domainSaveFailed: 'Échec de l\'enregistrement',
2698
2835
  ttImage: 'Image simple', imageSettings: 'Paramètres image',
2699
- imagePrompt: 'Description image', imagePromptPlaceholder: 'Décrivez l\'image souhaitée...',
2836
+ imagePrompt: 'Description image', imagePromptPlaceholder: 'Un lac au pied des montagnes enneigées, brume du matin, reflet des sommets sur le miroir de l\'eau, lumière cinématique, format paysage',
2700
2837
  imageSize: 'Taille image', refImageHint: 'Optionnel. Télécharger pour générer des variations ; laisser vide pour génération IA pure.',
2701
2838
  imgGenerate: 'Générer image', imgComplete: 'Image générée !', generating: 'Génération...', enterImagePrompt: 'Veuillez entrer une description d\'image',
2702
2839
  anchorSettings: 'Paramètres humain numérique',
@@ -2705,7 +2842,7 @@ const T = {
2705
2842
  anchorRefImage: 'Image de référence (Optionnel)',
2706
2843
  anchorRefImageHint: 'Optionnel. À télécharger pour affiner l\'apparence ; laisser vide pour génération IA pure.',
2707
2844
  scriptText: 'Texte du script',
2708
- scriptTextPlaceholder: 'Entrez le script à faire lire par le présentateur...',
2845
+ scriptTextPlaceholder: 'Bienvenue au bulletin techno du jour. Première nouvelle : la génération de vidéo IA est entrée dans l\'ère du gratuit……',
2709
2846
  resPortraitHD: 'Portrait 9:16 (HD)',
2710
2847
  subPositionHints: 'Indices position sous-titres',
2711
2848
  subPositionHintsPlaceholder: 'Placer les sous-titres dans le tiers inférieur, ne pas couvrir le visage du présentateur',
@@ -2724,11 +2861,23 @@ const T = {
2724
2861
  aStepConcat: 'Concaténation vidéo',
2725
2862
  systemPrompt: 'Prompt système',
2726
2863
  systemPromptPlaceholder: 'Instructions supplémentaires pour le modèle (ex. style, qualité). N\'affecte pas la description du contenu',
2864
+ apiKeyGetLink: 'Obtenir un API Key gratuit',
2865
+ apiKeyGuideLink: 'Guide de configuration',
2866
+ apiKeyDemoLink: 'Pas envie de configurer ? Essayez en ligne',
2867
+ formTipTips: '🎯 Astuces de prompt',
2868
+ formTipModels: '🧠 Comparaison des modèles',
2869
+ exampleLinkSimple: '📋 Exemples de prompts vidéo simple',
2870
+ exampleLinkCreative: '📋 Exemples de prompts vidéo créative',
2871
+ exampleLinkManuscript: '📋 Exemples de vidéo article',
2872
+ exampleLinkAnchor: '📋 Exemples de présentateur numérique',
2873
+ waitTip: '💡 Pendant l\'attente, découvrez ce que les autres créent avec Agnes',
2874
+ doneTipTiktok: '📈 Astuces réseaux sociaux',
2875
+ doneTipMore: '🎬 Plus d\'idées de création',
2727
2876
  },
2728
2877
  nl: {
2729
2878
  subtitle: 'AI-video, één klik',
2730
2879
  apiKeyTitle: 'API-sleutel', apiKeyNotConfigured: 'Niet geconfigureerd', apiKeyConfigured: 'Geconfigureerd',
2731
- apiKeyPlaceholder: 'Voer Agnes API-sleutel in', apiKeyMasked: 'Geconfigureerd (●●●)', save: 'Opslaan',
2880
+ apiKeyPlaceholder: 'Voer uw Agnes API Key in (gratis op platform.agnes-ai.com)', apiKeyMasked: 'Geconfigureerd (●●●)', save: 'Opslaan',
2732
2881
  clear: 'Wissen', clearConfirm: 'Weet u zeker dat u de API-sleutel wilt wissen?', apiKeyFromEnv: 'Geconfigureerd (env)',
2733
2882
  clearEnvHint: 'De API-sleutel is ingesteld via omgevingsvariabele AGNES_API_KEY en kan niet uit de UI worden gewist.',
2734
2883
  modelTitle: 'Modelselectie', modelHint: 'Kies de Agnes-modellen die voor generatie worden gebruikt. Beeld- en videomodellen zijn nog niet geopend; hun standaardwaarden blijven behouden.',
@@ -2750,7 +2899,7 @@ const T = {
2750
2899
  ttSimple: 'Afbeelding & Video', ttCreative: 'Creatieve video', ttManuscript: 'Artikelvideo',
2751
2900
  subModeLabel: 'Type', subModeVideo: '🎬 Video', subModeImage: '🖼️ Afbeelding',
2752
2901
  simpleSettings: 'Eenvoudige instellingen', creativeSettings: 'Creatieve instellingen', manuscriptSettings: 'Artikelinstellingen',
2753
- promptLabel: 'Videobeschrijving', promptPlaceholder: 'Beschrijf de gewenste video...',
2902
+ promptLabel: 'Videobeschrijving', promptPlaceholder: 'Een oranje kat doet een dutje op de vensterbank na de regen, zonlicht valt door het glas, de gordijnen waaien in de wind, 4K fotorealistisch',
2754
2903
  genMode: 'Modus', modeT2v: 'Tekst naar video', modeI2v: 'Afbeelding naar video', modeKeyframesSimple: 'Keyframes',
2755
2904
  duration: 'Duur', resolution: 'Resolutie',
2756
2905
  resPortrait: 'Portret 9:16', resLandscape: 'Liggend 16:9', resSquare: 'Vierkant 1:1',
@@ -2758,7 +2907,7 @@ const T = {
2758
2907
  chooseImage: 'Kies afbeelding', notSelected: 'Niet geselecteerd',
2759
2908
  advancedSettings: 'Geavanceerde instellingen', optional: 'Optioneel', seedPlaceholder: 'Leeg laten voor willekeurig', negativePlaceholder: 'Uit te sluiten elementen',
2760
2909
  taskName: 'Taaknaam', taskNamePlaceholder: 'Optioneel, automatisch gegenereerd indien leeg',
2761
- ideaLabel: 'Idee', ideaPlaceholder: 'Beschrijf uw verhaal, scènes en personages...',
2910
+ ideaLabel: 'Idee', ideaPlaceholder: 'Een robot geeft water aan een klein bloemetje in een verlaten stad, 3 scènes: zaailing ontdekken, water halen, bloem bloeit',
2762
2911
  visualStyle: 'Visuele stijl',
2763
2912
  requirementDefault: '3 scènes, elk 5 seconden, filmkwaliteit', styleDefault: 'filmrealistische stijl',
2764
2913
  chainingMode: 'Koppelingsmodus', modeKeyframes: 'keyframes (aanbevolen)', modeTi2vid: 'ti2vid (overgang)', modeNone: 'none (onafhankelijk)',
@@ -2772,7 +2921,7 @@ const T = {
2772
2921
  subStrokeColor: 'Randkleur', subStrokeWidth: 'Randbreedte', subBgColor: 'Achtergrondkleur',
2773
2922
  subStyleMode: 'Stijlmodus', subStyleFixed: 'Vast', subStyleLLM: 'AI Slim',
2774
2923
  subStyleHints: 'Stijlvoorkeuren', subStyleHintsHint: 'Beschrijf hoe ondertitels moeten variëren. AI kent positie, kleur en grootte toe per ondertitel.',
2775
- manuscriptText: 'Artikeltekst', manuscriptPlaceholder: 'Plak uw artikel, nieuws, blogbericht...',
2924
+ manuscriptText: 'Artikeltekst', manuscriptPlaceholder: 'Plak uw artikel, persbericht of blogpost. Bijvoorbeeld: een productintroductie van 500 woorden of een reisverslag - het systeem splitst automatisch in scènes',
2776
2925
  charCount: 'Tekens',
2777
2926
  startGenerate: 'Generatie starten', submitting: 'Verzenden...', taskRunning: 'Taak bezig...',
2778
2927
  loading: 'Laden...', noTasks: 'Geen taken', loadFailed: 'Laden mislukt',
@@ -2814,7 +2963,7 @@ const T = {
2814
2963
  domainSaved: 'Opgeslagen',
2815
2964
  domainSaveFailed: 'Opslaan mislukt',
2816
2965
  ttImage: 'Eenvoudige afbeelding', imageSettings: 'Afbeeldingsinstellingen',
2817
- imagePrompt: 'Afbeeldingsbeschrijving', imagePromptPlaceholder: 'Beschrijf de gewenste afbeelding...',
2966
+ imagePrompt: 'Afbeeldingsbeschrijving', imagePromptPlaceholder: 'Een meer aan de voet van besneeuwde bergen, ochtendmist, bergen weerspiegeld in het water, filmisch licht, liggend formaat',
2818
2967
  imageSize: 'Afbeeldingsgrootte', refImageHint: 'Optioneel. Uploaden voor variaties; leeg laten voor pure AI-generatie.',
2819
2968
  imgGenerate: 'Afbeelding genereren', imgComplete: 'Afbeelding gegenereerd!', generating: 'Genereren...', enterImagePrompt: 'Voer een afbeeldingsbeschrijving in',
2820
2969
  anchorSettings: 'Instellingen digitale mens',
@@ -2823,7 +2972,7 @@ const T = {
2823
2972
  anchorRefImage: 'Referentieafbeelding (Optioneel)',
2824
2973
  anchorRefImageHint: 'Optioneel. Uploaden om het uiterlijk te verfijnen; leeg laten voor pure AI-generatie.',
2825
2974
  scriptText: 'Scripttekst',
2826
- scriptTextPlaceholder: 'Voer het script in dat de presentator moet voorlezen...',
2975
+ scriptTextPlaceholder: 'Welkom bij het technieuwsbulletin van vandaag. Eerste bericht: AI-videogeneratie is het gratis tijdperk binnengegaan……',
2827
2976
  resPortraitHD: 'Portret 9:16 (HD)',
2828
2977
  subPositionHints: 'Tips voor ondertitelpositie',
2829
2978
  subPositionHintsPlaceholder: 'Plaats ondertitels in het onderste derde deel, bedek het gezicht van de presentator niet',
@@ -2842,11 +2991,23 @@ const T = {
2842
2991
  aStepConcat: 'Video samenvoegen',
2843
2992
  systemPrompt: 'Systeemprompt',
2844
2993
  systemPromptPlaceholder: 'Extra instructies voor het model (bijv. stijl, kwaliteit). Heeft geen invloed op de inhoudsbeschrijving',
2994
+ apiKeyGetLink: 'Gratis API Key aanvragen',
2995
+ apiKeyGuideLink: 'Configuratiegids',
2996
+ apiKeyDemoLink: 'Geen zin om te configureren? Probeer online',
2997
+ formTipTips: '🎯 Prompt-tips',
2998
+ formTipModels: '🧠 Modelvergelijking',
2999
+ exampleLinkSimple: '📋 Voorbeelden van eenvoudige video-prompts',
3000
+ exampleLinkCreative: '📋 Voorbeelden van creatieve video-prompts',
3001
+ exampleLinkManuscript: '📋 Voorbeelden van artikelvideo',
3002
+ exampleLinkAnchor: '📋 Voorbeelden van digitale presentator',
3003
+ waitTip: '💡 Bekijk ondertussen wat anderen met Agnes maken',
3004
+ doneTipTiktok: '📈 Social media tips',
3005
+ doneTipMore: '🎬 Meer creatieve ideeën',
2845
3006
  },
2846
3007
  es: {
2847
3008
  subtitle: 'Video IA, un clic',
2848
3009
  apiKeyTitle: 'Clave API', apiKeyNotConfigured: 'No configurado', apiKeyConfigured: 'Configurado',
2849
- apiKeyPlaceholder: 'Ingrese la clave API de Agnes', apiKeyMasked: 'Configurado (●●●)', save: 'Guardar',
3010
+ apiKeyPlaceholder: 'Introduce tu Agnes API Key (gratis en platform.agnes-ai.com)', apiKeyMasked: 'Configurado (●●●)', save: 'Guardar',
2850
3011
  clear: 'Eliminar', clearConfirm: '¿Está seguro de eliminar la clave API?', apiKeyFromEnv: 'Configurado (env)',
2851
3012
  clearEnvHint: 'La clave API está configurada mediante la variable de entorno AGNES_API_KEY y no se puede eliminar desde la interfaz.',
2852
3013
  modelTitle: 'Selección de modelo', modelHint: 'Elija los modelos Agnes utilizados para la generación. Los modelos de imagen y vídeo aún no están abiertos; se conservan sus valores predeterminados.',
@@ -2868,7 +3029,7 @@ const T = {
2868
3029
  ttSimple: 'Imagen y Video', ttCreative: 'Video creativo', ttManuscript: 'Video artículo',
2869
3030
  subModeLabel: 'Tipo', subModeVideo: '🎬 Video', subModeImage: '🖼️ Imagen',
2870
3031
  simpleSettings: 'Configuración simple', creativeSettings: 'Configuración creativa', manuscriptSettings: 'Configuración artículo',
2871
- promptLabel: 'Descripción del video', promptPlaceholder: 'Describa el video deseado...',
3032
+ promptLabel: 'Descripción del video', promptPlaceholder: 'Un gato naranja dormita en el alféizar tras la lluvia, la luz del sol atraviesa el cristal, la cortina se mueve con el viento, 4K fotorrealista',
2872
3033
  genMode: 'Modo', modeT2v: 'Texto a video', modeI2v: 'Imagen a video', modeKeyframesSimple: 'Fotogramas clave',
2873
3034
  duration: 'Duración', resolution: 'Resolución',
2874
3035
  resPortrait: 'Vertical 9:16', resLandscape: 'Horizontal 16:9', resSquare: 'Cuadrado 1:1',
@@ -2876,7 +3037,7 @@ const T = {
2876
3037
  chooseImage: 'Elegir imagen', notSelected: 'No seleccionado',
2877
3038
  advancedSettings: 'Configuración avanzada', optional: 'Opcional', seedPlaceholder: 'Dejar vacío = aleatorio', negativePlaceholder: 'Elementos a excluir',
2878
3039
  taskName: 'Nombre de tarea', taskNamePlaceholder: 'Opcional, generado automáticamente si está vacío',
2879
- ideaLabel: 'Idea', ideaPlaceholder: 'Describa su historia, escenas y personajes...',
3040
+ ideaLabel: 'Idea', ideaPlaceholder: 'Un robot riega una pequeña flor en una ciudad abandonada, 3 escenas: descubrir el brote, traer agua, la flor florece',
2880
3041
  visualStyle: 'Estilo visual',
2881
3042
  requirementDefault: '3 escenas, 5 segundos cada una, calidad cinematográfica', styleDefault: 'estilo realista cinematográfico',
2882
3043
  chainingMode: 'Modo de encadenamiento', modeKeyframes: 'keyframes (recomendado)', modeTi2vid: 'ti2vid (transición)', modeNone: 'none (independiente)',
@@ -2890,7 +3051,7 @@ const T = {
2890
3051
  subStrokeColor: 'Color de borde', subStrokeWidth: 'Ancho de borde', subBgColor: 'Color de fondo',
2891
3052
  subStyleMode: 'Modo de estilo', subStyleFixed: 'Fijo', subStyleLLM: 'IA inteligente',
2892
3053
  subStyleHints: 'Preferencias de estilo', subStyleHintsHint: 'Describa cómo deben variar los subtítulos. La IA asignará posición, color y tamaño a cada subtítulo.',
2893
- manuscriptText: 'Texto del artículo', manuscriptPlaceholder: 'Pegue su artículo, noticia, entrada de blog...',
3054
+ manuscriptText: 'Texto del artículo', manuscriptPlaceholder: 'Pega tu artículo, nota de prensa o publicación de blog. Ejemplo: una presentación de producto de 500 palabras o un relato de viaje - el sistema lo divide en escenas automáticamente',
2894
3055
  charCount: 'Caracteres',
2895
3056
  startGenerate: 'Iniciar generación', submitting: 'Enviando...', taskRunning: 'Tarea en curso...',
2896
3057
  loading: 'Cargando...', noTasks: 'Sin tareas', loadFailed: 'Error al cargar',
@@ -2932,7 +3093,7 @@ const T = {
2932
3093
  domainSaved: 'Guardado',
2933
3094
  domainSaveFailed: 'Error al guardar',
2934
3095
  ttImage: 'Imagen simple', imageSettings: 'Configuración de imagen',
2935
- imagePrompt: 'Descripción de imagen', imagePromptPlaceholder: 'Describa la imagen deseada...',
3096
+ imagePrompt: 'Descripción de imagen', imagePromptPlaceholder: 'Un lago al pie de montañas nevadas, niebla matinal, montañas reflejadas en el agua, luz cinematográfica, formato horizontal',
2936
3097
  imageSize: 'Tamaño de imagen', refImageHint: 'Opcional. Subir para generar variaciones; dejar vacío para generación IA pura.',
2937
3098
  imgGenerate: 'Generar imagen', imgComplete: '¡Imagen generada!', generating: 'Generando...', enterImagePrompt: 'Ingrese una descripción de imagen',
2938
3099
  anchorSettings: 'Configuración de humano digital',
@@ -2941,7 +3102,7 @@ const T = {
2941
3102
  anchorRefImage: 'Imagen de referencia (Opcional)',
2942
3103
  anchorRefImageHint: 'Opcional. Subir para afinar la apariencia; dejar vacío para generación IA pura.',
2943
3104
  scriptText: 'Texto del guion',
2944
- scriptTextPlaceholder: 'Ingrese el guion para que lea el presentador...',
3105
+ scriptTextPlaceholder: 'Bienvenidos al boletín tecnológico de hoy. Primera noticia: la generación de video con IA ha entrado en la era gratuita……',
2945
3106
  resPortraitHD: 'Vertical 9:16 (HD)',
2946
3107
  subPositionHints: 'Sugerencias de posición de subtítulos',
2947
3108
  subPositionHintsPlaceholder: 'Colocar subtítulos en el tercio inferior, no cubrir el rostro del presentador',
@@ -2960,11 +3121,23 @@ const T = {
2960
3121
  aStepConcat: 'Concatenación de video',
2961
3122
  systemPrompt: 'Prompt del sistema',
2962
3123
  systemPromptPlaceholder: 'Instrucciones adicionales para el modelo (ej. estilo, calidad). No afecta la descripción del contenido',
3124
+ apiKeyGetLink: 'Obtener API Key gratis',
3125
+ apiKeyGuideLink: 'Guía de configuración',
3126
+ apiKeyDemoLink: '¿No quieres configurar? Pruébalo en línea',
3127
+ formTipTips: '🎯 Consejos de prompt',
3128
+ formTipModels: '🧠 Comparación de modelos',
3129
+ exampleLinkSimple: '📋 Ejemplos de prompts de video simple',
3130
+ exampleLinkCreative: '📋 Ejemplos de prompts de video creativo',
3131
+ exampleLinkManuscript: '📋 Ejemplos de video artículo',
3132
+ exampleLinkAnchor: '📋 Ejemplos de presentador digital',
3133
+ waitTip: '💡 Mientras esperas, mira lo que otros crean con Agnes',
3134
+ doneTipTiktok: '📈 Ideas para redes sociales',
3135
+ doneTipMore: '🎬 Más ideas de creación',
2963
3136
  },
2964
3137
  pt: {
2965
3138
  subtitle: 'Vídeo IA, um clique',
2966
3139
  apiKeyTitle: 'Chave API', apiKeyNotConfigured: 'Não configurado', apiKeyConfigured: 'Configurado',
2967
- apiKeyPlaceholder: 'Insira a chave API Agnes', apiKeyMasked: 'Configurado (●●●)', save: 'Salvar',
3140
+ apiKeyPlaceholder: 'Digite sua Agnes API Key (grátis em platform.agnes-ai.com)', apiKeyMasked: 'Configurado (●●●)', save: 'Salvar',
2968
3141
  clear: 'Limpar', clearConfirm: 'Tem certeza de que deseja remover a chave API?', apiKeyFromEnv: 'Configurado (env)',
2969
3142
  clearEnvHint: 'A chave API está definida via variável de ambiente AGNES_API_KEY e não pode ser removida pela interface.',
2970
3143
  modelTitle: 'Seleção de modelo', modelHint: 'Escolha os modelos Agnes usados para a geração. Os modelos de imagem e vídeo ainda não estão abertos; seus valores padrão são mantidos.',
@@ -2986,7 +3159,7 @@ const T = {
2986
3159
  ttSimple: 'Imagem e Vídeo', ttCreative: 'Vídeo criativo', ttManuscript: 'Vídeo artigo',
2987
3160
  subModeLabel: 'Tipo', subModeVideo: '🎬 Vídeo', subModeImage: '🖼️ Imagem',
2988
3161
  simpleSettings: 'Configurações simples', creativeSettings: 'Configurações criativas', manuscriptSettings: 'Configurações artigo',
2989
- promptLabel: 'Descrição do vídeo', promptPlaceholder: 'Descreva o vídeo desejado...',
3162
+ promptLabel: 'Descrição do vídeo', promptPlaceholder: 'Um gato laranja cochila no parapeito da janela depois da chuva, a luz do sol atravessa o vidro, a cortina balança ao vento, 4K fotorrealista',
2990
3163
  genMode: 'Modo', modeT2v: 'Texto para vídeo', modeI2v: 'Imagem para vídeo', modeKeyframesSimple: 'Keyframes',
2991
3164
  duration: 'Duração', resolution: 'Resolução',
2992
3165
  resPortrait: 'Retrato 9:16', resLandscape: 'Paisagem 16:9', resSquare: 'Quadrado 1:1',
@@ -2994,7 +3167,7 @@ const T = {
2994
3167
  chooseImage: 'Escolher imagem', notSelected: 'Não selecionado',
2995
3168
  advancedSettings: 'Configurações avançadas', optional: 'Opcional', seedPlaceholder: 'Deixar vazio = aleatório', negativePlaceholder: 'Elementos a excluir',
2996
3169
  taskName: 'Nome da tarefa', taskNamePlaceholder: 'Opcional, gerado automaticamente se vazio',
2997
- ideaLabel: 'Ideia', ideaPlaceholder: 'Descreva sua história, cenas e personagens...',
3170
+ ideaLabel: 'Ideia', ideaPlaceholder: 'Um robô rega uma pequena flor em uma cidade abandonada, 3 cenas: descobrir o broto, buscar água, a flor desabrocha',
2998
3171
  visualStyle: 'Estilo visual',
2999
3172
  requirementDefault: '3 cenas, 5 segundos cada, qualidade cinematográfica', styleDefault: 'estilo realista cinematográfico',
3000
3173
  chainingMode: 'Modo de encadeamento', modeKeyframes: 'keyframes (recomendado)', modeTi2vid: 'ti2vid (transição)', modeNone: 'none (independente)',
@@ -3008,7 +3181,7 @@ const T = {
3008
3181
  subStrokeColor: 'Cor do contorno', subStrokeWidth: 'Largura do contorno', subBgColor: 'Cor de fundo',
3009
3182
  subStyleMode: 'Modo de estilo', subStyleFixed: 'Fixo', subStyleLLM: 'IA inteligente',
3010
3183
  subStyleHints: 'Preferências de estilo', subStyleHintsHint: 'Descreva como as legendas devem variar. A IA atribuirá posição, cor e tamanho a cada legenda.',
3011
- manuscriptText: 'Texto do artigo', manuscriptPlaceholder: 'Cole seu artigo, notícia, post de blog...',
3184
+ manuscriptText: 'Texto do artigo', manuscriptPlaceholder: 'Cole seu artigo, comunicado de imprensa ou post de blog. Exemplo: uma apresentação de produto de 500 palavras ou um relato de viagem - o sistema divide em cenas automaticamente',
3012
3185
  charCount: 'Caracteres',
3013
3186
  startGenerate: 'Iniciar geração', submitting: 'Enviando...', taskRunning: 'Tarefa em andamento...',
3014
3187
  loading: 'Carregando...', noTasks: 'Nenhuma tarefa', loadFailed: 'Falha ao carregar',
@@ -3050,7 +3223,7 @@ const T = {
3050
3223
  domainSaved: 'Salvo',
3051
3224
  domainSaveFailed: 'Falha ao salvar',
3052
3225
  ttImage: 'Imagem simples', imageSettings: 'Configurações de imagem',
3053
- imagePrompt: 'Descrição da imagem', imagePromptPlaceholder: 'Descreva a imagem desejada...',
3226
+ imagePrompt: 'Descrição da imagem', imagePromptPlaceholder: 'Um lago ao pé de montanhas nevadas, névoa matinal, montanhas refletidas na água, luz cinematográfica, formato paisagem',
3054
3227
  imageSize: 'Tamanho da imagem', refImageHint: 'Opcional. Enviar para gerar variações; deixar vazio para geração IA pura.',
3055
3228
  imgGenerate: 'Gerar imagem', imgComplete: 'Imagem gerada!', generating: 'Gerando...', enterImagePrompt: 'Insira uma descrição de imagem',
3056
3229
  anchorSettings: 'Configurações de humano digital',
@@ -3059,7 +3232,7 @@ const T = {
3059
3232
  anchorRefImage: 'Imagem de referência (Opcional)',
3060
3233
  anchorRefImageHint: 'Opcional. Enviar para refinar a aparência; deixar vazio para geração IA pura.',
3061
3234
  scriptText: 'Texto do roteiro',
3062
- scriptTextPlaceholder: 'Insira o roteiro para o apresentador ler...',
3235
+ scriptTextPlaceholder: 'Bem-vindos ao boletim de tecnologia de hoje. Primeira notícia: a geração de vídeos com IA entrou na era gratuita……',
3063
3236
  resPortraitHD: 'Retrato 9:16 (HD)',
3064
3237
  subPositionHints: 'Sugestões de posição das legendas',
3065
3238
  subPositionHintsPlaceholder: 'Colocar legendas no terço inferior, não cobrir o rosto do apresentador',
@@ -3078,11 +3251,23 @@ const T = {
3078
3251
  aStepConcat: 'Concatenação de vídeo',
3079
3252
  systemPrompt: 'Prompt do sistema',
3080
3253
  systemPromptPlaceholder: 'Instruções adicionais para o modelo (ex. estilo, qualidade). Não afeta a descrição do conteúdo',
3254
+ apiKeyGetLink: 'Obter API Key grátis',
3255
+ apiKeyGuideLink: 'Guia de configuração',
3256
+ apiKeyDemoLink: 'Não quer configurar? Experimente online',
3257
+ formTipTips: '🎯 Dicas de prompt',
3258
+ formTipModels: '🧠 Comparação de modelos',
3259
+ exampleLinkSimple: '📋 Exemplos de prompts de vídeo simples',
3260
+ exampleLinkCreative: '📋 Exemplos de prompts de vídeo criativo',
3261
+ exampleLinkManuscript: '📋 Exemplos de vídeo artigo',
3262
+ exampleLinkAnchor: '📋 Exemplos de apresentador digital',
3263
+ waitTip: '💡 Enquanto espera, veja o que outras pessoas criam com Agnes',
3264
+ doneTipTiktok: '📈 Ideias para redes sociais',
3265
+ doneTipMore: '🎬 Mais ideias de criação',
3081
3266
  },
3082
3267
  it: {
3083
3268
  subtitle: 'Video IA, un clic',
3084
3269
  apiKeyTitle: 'Chiave API', apiKeyNotConfigured: 'Non configurato', apiKeyConfigured: 'Configurato',
3085
- apiKeyPlaceholder: 'Inserisci la chiave API Agnes', apiKeyMasked: 'Configurato (●●●)', save: 'Salva',
3270
+ apiKeyPlaceholder: 'Inserisci la tua Agnes API Key (gratuita su platform.agnes-ai.com)', apiKeyMasked: 'Configurato (●●●)', save: 'Salva',
3086
3271
  clear: 'Cancella', clearConfirm: 'Sei sicuro di voler cancellare la chiave API?', apiKeyFromEnv: 'Configurato (env)',
3087
3272
  clearEnvHint: 'La chiave API è impostata tramite la variabile d\'ambiente AGNES_API_KEY e non può essere rimossa dall\'interfaccia.',
3088
3273
  modelTitle: 'Selezione modello', modelHint: 'Scegli i modelli Agnes utilizzati per la generazione. I modelli immagine e video non sono ancora aperti; i loro valori predefiniti vengono mantenuti.',
@@ -3104,7 +3289,7 @@ const T = {
3104
3289
  ttSimple: 'Immagine e Video', ttCreative: 'Video creativo', ttManuscript: 'Video articolo',
3105
3290
  subModeLabel: 'Tipo', subModeVideo: '🎬 Video', subModeImage: '🖼️ Immagine',
3106
3291
  simpleSettings: 'Impostazioni semplici', creativeSettings: 'Impostazioni creative', manuscriptSettings: 'Impostazioni articolo',
3107
- promptLabel: 'Descrizione video', promptPlaceholder: 'Descrivi il video desiderato...',
3292
+ promptLabel: 'Descrizione video', promptPlaceholder: 'Un gatto arancione sonnecchia sul davanzale dopo la pioggia, la luce del sole filtra dal vetro, la tenda ondeggia al vento, 4K fotorealistico',
3108
3293
  genMode: 'Modalità', modeT2v: 'Testo a video', modeI2v: 'Immagine a video', modeKeyframesSimple: 'Keyframe',
3109
3294
  duration: 'Durata', resolution: 'Risoluzione',
3110
3295
  resPortrait: 'Verticale 9:16', resLandscape: 'Orizzontale 16:9', resSquare: 'Quadrato 1:1',
@@ -3112,7 +3297,7 @@ const T = {
3112
3297
  chooseImage: 'Scegli immagine', notSelected: 'Non selezionato',
3113
3298
  advancedSettings: 'Impostazioni avanzate', optional: 'Opzionale', seedPlaceholder: 'Lascia vuoto = casuale', negativePlaceholder: 'Elementi da escludere',
3114
3299
  taskName: 'Nome task', taskNamePlaceholder: 'Opzionale, generato automaticamente se vuoto',
3115
- ideaLabel: 'Idea', ideaPlaceholder: 'Descrivi la tua storia, scene e personaggi...',
3300
+ ideaLabel: 'Idea', ideaPlaceholder: 'Un robot innaffia un piccolo fiore in una città abbandonata, 3 scene: scoprire il germoglio, portare l\'acqua, il fiore sboccia',
3116
3301
  visualStyle: 'Stile visivo',
3117
3302
  requirementDefault: '3 scene, 5 secondi ciascuna, qualità cinematografica', styleDefault: 'stile realistico cinematografico',
3118
3303
  chainingMode: 'Modalità concatenamento', modeKeyframes: 'keyframes (consigliato)', modeTi2vid: 'ti2vid (transizione)', modeNone: 'none (indipendente)',
@@ -3126,7 +3311,7 @@ const T = {
3126
3311
  subStrokeColor: 'Colore bordo', subStrokeWidth: 'Spessore bordo', subBgColor: 'Colore sfondo',
3127
3312
  subStyleMode: 'Modalità stile', subStyleFixed: 'Fisso', subStyleLLM: 'IA smart',
3128
3313
  subStyleHints: 'Preferenze stile', subStyleHintsHint: 'Descrivi come i sottotitoli devono variare. L\'IA assegnerà posizione, colore e dimensione a ciascun sottotitolo.',
3129
- manuscriptText: 'Testo dell\'articolo', manuscriptPlaceholder: 'Incolla il tuo articolo, notizia, post del blog...',
3314
+ manuscriptText: 'Testo dell\'articolo', manuscriptPlaceholder: 'Incolla il tuo articolo, comunicato stampa o post del blog. Esempio: una presentazione di prodotto di 500 parole o un racconto di viaggio - il sistema lo divide in scene automaticamente',
3130
3315
  charCount: 'Caratteri',
3131
3316
  startGenerate: 'Avvia generazione', submitting: 'Invio...', taskRunning: 'Task in corso...',
3132
3317
  loading: 'Caricamento...', noTasks: 'Nessun task', loadFailed: 'Caricamento fallito',
@@ -3168,7 +3353,7 @@ const T = {
3168
3353
  domainSaved: 'Salvato',
3169
3354
  domainSaveFailed: 'Salvataggio fallito',
3170
3355
  ttImage: 'Immagine semplice', imageSettings: 'Impostazioni immagine',
3171
- imagePrompt: 'Descrizione immagine', imagePromptPlaceholder: 'Descrivi l\'immagine desiderata...',
3356
+ imagePrompt: 'Descrizione immagine', imagePromptPlaceholder: 'Un lago ai piedi di montagne innevate, nebbia mattutina, montagne riflesse nell\'acqua, luce cinematografica, formato orizzontale',
3172
3357
  imageSize: 'Dimensione immagine', refImageHint: 'Opzionale. Carica per generare varianti; lascia vuoto per generazione IA pura.',
3173
3358
  imgGenerate: 'Genera immagine', imgComplete: 'Immagine generata!', generating: 'Generazione...', enterImagePrompt: 'Inserisci una descrizione dell\'immagine',
3174
3359
  anchorSettings: 'Impostazioni umano digitale',
@@ -3177,7 +3362,7 @@ const T = {
3177
3362
  anchorRefImage: 'Immagine di riferimento (Opzionale)',
3178
3363
  anchorRefImageHint: 'Opzionale. Carica per perfezionare l\'aspetto; lascia vuoto per generazione IA pura.',
3179
3364
  scriptText: 'Testo della sceneggiatura',
3180
- scriptTextPlaceholder: 'Inserisci il testo che il presentatore deve leggere...',
3365
+ scriptTextPlaceholder: 'Benvenuti al telegiornale tecnologico di oggi. Prima notizia: la generazione video con IA è entrata nell\'era gratuita……',
3181
3366
  resPortraitHD: 'Verticale 9:16 (HD)',
3182
3367
  subPositionHints: 'Suggerimenti posizione sottotitoli',
3183
3368
  subPositionHintsPlaceholder: 'Posiziona i sottotitoli nel terzo inferiore, non coprire il volto del presentatore',
@@ -3196,6 +3381,18 @@ const T = {
3196
3381
  aStepConcat: 'Concatenazione video',
3197
3382
  systemPrompt: 'Prompt di sistema',
3198
3383
  systemPromptPlaceholder: 'Istruzioni aggiuntive per il modello (es. stile, qualità). Non influisce sulla descrizione del contenuto',
3384
+ apiKeyGetLink: 'Ottieni API Key gratis',
3385
+ apiKeyGuideLink: 'Guida alla configurazione',
3386
+ apiKeyDemoLink: 'Non vuoi configurare? Provalo online',
3387
+ formTipTips: '🎯 Consigli sui prompt',
3388
+ formTipModels: '🧠 Confronto modelli',
3389
+ exampleLinkSimple: '📋 Esempi di prompt video semplice',
3390
+ exampleLinkCreative: '📋 Esempi di prompt video creativo',
3391
+ exampleLinkManuscript: '📋 Esempi di video articolo',
3392
+ exampleLinkAnchor: '📋 Esempi di presentatore digitale',
3393
+ waitTip: '💡 Mentre aspetti, guarda cosa creano gli altri con Agnes',
3394
+ doneTipTiktok: '📈 Idee per i social',
3395
+ doneTipMore: '🎬 Altre idee creative',
3199
3396
  },
3200
3397
  };
3201
3398
 
@@ -11,7 +11,7 @@ from fastapi import APIRouter, File, Form, HTTPException, UploadFile
11
11
  from fastapi.responses import FileResponse
12
12
 
13
13
  from core.api.agnes_image import AgnesImageAPI
14
- from core.config import get_api_key
14
+ from core.config import API_KEY_MISSING_MSG, get_api_key
15
15
  from core.task_manager import TaskManager
16
16
  from models.task import SimpleImageTask, StepStatus
17
17
 
@@ -38,7 +38,7 @@ async def generate_image(
38
38
  """简单图片生成:创建任务 → 直调 Agnes Image API → 保存到任务目录。"""
39
39
  api_key = get_api_key()
40
40
  if not api_key:
41
- raise HTTPException(status_code=400, detail="请先配置 API Key")
41
+ raise HTTPException(status_code=400, detail=API_KEY_MISSING_MSG)
42
42
 
43
43
  if len(prompt) > 5000:
44
44
  raise HTTPException(status_code=422, detail="prompt 最多 5000 字符")
@@ -10,7 +10,7 @@ from typing import List, Optional
10
10
 
11
11
  from fastapi import APIRouter, File, Form, HTTPException, UploadFile
12
12
 
13
- from core.config import DURATION_FRAME_MAP, get_api_key
13
+ from core.config import API_KEY_MISSING_MSG, DURATION_FRAME_MAP, get_api_key
14
14
  from core.pipelines.poetry_video import POETRY_SUBTITLE_STYLE
15
15
  from core.screenwriter import build_poetry_scene_prompt
16
16
  from core.task_manager import TaskManager
@@ -104,7 +104,7 @@ async def create_simple_task(
104
104
  """创建简单视频任务(类型 1)。"""
105
105
  api_key = get_api_key()
106
106
  if not api_key:
107
- raise HTTPException(status_code=400, detail="请先配置 API Key")
107
+ raise HTTPException(status_code=400, detail=API_KEY_MISSING_MSG)
108
108
 
109
109
  # P7: 参数校验
110
110
  _VALID_MODES = {"t2v", "i2v", "ti2vid", "keyframes"}
@@ -199,7 +199,7 @@ async def create_creative_task(
199
199
  """创建创意长视频任务(类型 2)。"""
200
200
  api_key = get_api_key()
201
201
  if not api_key:
202
- raise HTTPException(status_code=400, detail="请先配置 API Key")
202
+ raise HTTPException(status_code=400, detail=API_KEY_MISSING_MSG)
203
203
 
204
204
  # v4.0: 音色与目标语言兼容性校验
205
205
  if audio_enabled:
@@ -310,7 +310,7 @@ async def create_manuscript_task(
310
310
  """创建稿件长视频任务(类型 3)。"""
311
311
  api_key = get_api_key()
312
312
  if not api_key:
313
- raise HTTPException(status_code=400, detail="请先配置 API Key")
313
+ raise HTTPException(status_code=400, detail=API_KEY_MISSING_MSG)
314
314
 
315
315
  if not manuscript_text.strip():
316
316
  raise HTTPException(status_code=400, detail="稿件内容不能为空")
@@ -385,7 +385,7 @@ async def create_poetry_task(
385
385
  """创建诗词视频任务(类型 6)。"""
386
386
  api_key = get_api_key()
387
387
  if not api_key:
388
- raise HTTPException(status_code=400, detail="请先配置 API Key")
388
+ raise HTTPException(status_code=400, detail=API_KEY_MISSING_MSG)
389
389
 
390
390
  # v4.0: 音色与目标语言兼容性校验
391
391
  if audio_enabled:
@@ -483,7 +483,7 @@ async def create_anchor_task(
483
483
  """创建数字人口播任务(类型 4 / Phase 3)。"""
484
484
  api_key = get_api_key()
485
485
  if not api_key:
486
- raise HTTPException(status_code=400, detail="请先配置 API Key")
486
+ raise HTTPException(status_code=400, detail=API_KEY_MISSING_MSG)
487
487
 
488
488
  # v4.0: 音色与稿件文本兼容性校验
489
489
  # 数字人口播的稿件由用户直接输入,应以「稿件文本的实际文字体系」为准做脚本级
@@ -5,7 +5,7 @@ import logging
5
5
 
6
6
  from fastapi import APIRouter, HTTPException
7
7
 
8
- from core.config import get_api_key
8
+ from core.config import API_KEY_MISSING_MSG, get_api_key
9
9
  from core.task_manager import TaskManager
10
10
  from models.task import (
11
11
  AnchorVideoTask,
@@ -77,7 +77,7 @@ async def get_task(task_id: str):
77
77
  async def resume_task(task_id: str):
78
78
  api_key = get_api_key()
79
79
  if not api_key:
80
- raise HTTPException(status_code=400, detail="请先配置 API Key")
80
+ raise HTTPException(status_code=400, detail=API_KEY_MISSING_MSG)
81
81
 
82
82
  # 关键段串行化:check 与 insert 之间存在多个 await 让出点,快速重复 resume
83
83
  # 会让两次请求都通过 "task not in active_pipelines" 检查并各自启动 pipeline,