akari-video 1.5.0 → 1.5.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.
Files changed (43) hide show
  1. package/package.json +1 -1
  2. package/src/cli.mjs +2 -0
  3. package/src/connect/connectors.json +1 -1
  4. package/src/new-command.mjs +12 -6
  5. package/src/playbook-command.mjs +24 -14
  6. package/src/template-command.mjs +21 -0
  7. package/vendor/catalog/INDEX.md +13 -3
  8. package/vendor/docs/contract-2026-10-16-vocabulary-v0.md +5 -3
  9. package/vendor/packages/akari-launcher/package.json +1 -1
  10. package/vendor/packages/i18n/locales/en/annotations.json +11 -11
  11. package/vendor/packages/i18n/locales/en/annotationscommon.json +1 -1
  12. package/vendor/packages/i18n/locales/en/cli.json +20 -15
  13. package/vendor/packages/i18n/locales/en/connect.json +1 -1
  14. package/vendor/packages/i18n/locales/en/inspector.json +12 -12
  15. package/vendor/packages/i18n/locales/en/lint.json +1 -1
  16. package/vendor/packages/i18n/locales/en/preview.json +1 -1
  17. package/vendor/packages/i18n/locales/en/project.json +24 -16
  18. package/vendor/packages/i18n/locales/en/report-cards.json +1 -1
  19. package/vendor/packages/i18n/locales/en/report-project.json +2 -2
  20. package/vendor/packages/i18n/locales/en/shell.json +3 -3
  21. package/vendor/packages/i18n/locales/en/skills.json +8 -4
  22. package/vendor/packages/i18n/locales/en/surfaces.json +30 -30
  23. package/vendor/packages/i18n/locales/en/transcript.json +8 -8
  24. package/vendor/packages/i18n/locales/ja/annotations.json +14 -14
  25. package/vendor/packages/i18n/locales/ja/annotationscommon.json +1 -1
  26. package/vendor/packages/i18n/locales/ja/cli.json +22 -17
  27. package/vendor/packages/i18n/locales/ja/connect.json +1 -1
  28. package/vendor/packages/i18n/locales/ja/inspector.json +13 -13
  29. package/vendor/packages/i18n/locales/ja/lint.json +1 -1
  30. package/vendor/packages/i18n/locales/ja/preview.json +1 -1
  31. package/vendor/packages/i18n/locales/ja/project.json +26 -18
  32. package/vendor/packages/i18n/locales/ja/report-cards.json +1 -1
  33. package/vendor/packages/i18n/locales/ja/report-project.json +2 -2
  34. package/vendor/packages/i18n/locales/ja/shell.json +4 -4
  35. package/vendor/packages/i18n/locales/ja/skills.json +8 -4
  36. package/vendor/packages/i18n/locales/ja/surfaces.json +30 -30
  37. package/vendor/packages/i18n/locales/ja/transcript.json +8 -8
  38. package/vendor/presets/luts/INDEX.md +1 -1
  39. package/vendor/skills/akari/SKILL.md +1 -1
  40. package/vendor/skills/connect/SKILL.md +3 -3
  41. package/vendor/skills/create-project/SKILL.md +10 -6
  42. package/vendor/skills/generate-narration/SKILL.md +1 -1
  43. package/vendor/skills/setup-chat-approval/SKILL.md +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "akari-video",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "description": "AKARI Video launcher CLI — start an AI-edited video project from any directory: scaffold, connection check, then hand over to Claude Code (or opencode). AKARI Video を opencode や Claude Code で、どのディレクトリからでも始めるための `akari` ランチャー CLI。接続確認(doctor)→ 未セットアップならプロジェクト雛形を作成 → AI エージェントを起動する。外部 npm 依存ゼロ(Node.js 組み込みモジュールのみ)。",
5
5
  "type": "module",
6
6
  "bin": {
package/src/cli.mjs CHANGED
@@ -32,6 +32,7 @@ import { runWordBookCommand } from './word-book-command.mjs';
32
32
  import { runConnectCommand } from './connect-command.mjs';
33
33
  import { runProjectCommand } from './project-command.mjs';
34
34
  import { runPlaybookCommand } from './playbook-command.mjs';
35
+ import { runTemplateCommand } from './template-command.mjs';
35
36
  import { runRecipeCommand } from './recipe-command.mjs';
36
37
  import { resolveRuntimePaths } from './runtime-diagnostics.mjs';
37
38
  import { cliText } from './i18n.mjs';
@@ -48,6 +49,7 @@ export const runSubcommands = {
48
49
  connect: runConnectCommand,
49
50
  project: runProjectCommand,
50
51
  playbook: runPlaybookCommand,
52
+ template: runTemplateCommand,
51
53
  recipe: runRecipeCommand,
52
54
  };
53
55
 
@@ -11,7 +11,7 @@
11
11
  {
12
12
  "id": "3d-recipes",
13
13
  "group": "tools",
14
- "name": "3D レシピ",
14
+ "name": "3D の設定",
15
15
  "description": "Blender で 3D 素材を作る",
16
16
  "icon": "3D",
17
17
  "kind": "blender-recipe",
@@ -12,18 +12,20 @@ const languageTagPattern = /^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/;
12
12
 
13
13
  function parseArguments(args) {
14
14
  let target;
15
+ let scaffold;
15
16
  let template;
16
17
  let from;
17
18
  let lang;
18
19
 
19
20
  for (let index = 0; index < args.length; index += 1) {
20
21
  const argument = args[index];
21
- if (argument === '--template') {
22
+ if (argument === '--template' || argument === '--scaffold') {
22
23
  const value = args[index + 1];
23
24
  if (!value || value.startsWith('--')) {
24
- throw new Error(`${usage()}\n${cliText('cli.new.error.templateMissing', {})}`);
25
+ throw new Error(`${usage()}\n${cliText(argument === '--scaffold' ? 'cli.new.error.scaffoldMissingPath' : 'cli.new.error.templateMissing', {})}`);
25
26
  }
26
- template = value;
27
+ if (argument === '--scaffold') scaffold = value;
28
+ else template = value;
27
29
  index += 1;
28
30
  } else if (argument === '--from') {
29
31
  const value = args[index + 1];
@@ -51,7 +53,10 @@ function parseArguments(args) {
51
53
  if (target === undefined) {
52
54
  throw new Error(usage());
53
55
  }
54
- return { target, template, from, lang };
56
+ if (scaffold !== undefined && template !== undefined) {
57
+ throw new Error(`${usage()}\n${cliText('cli.new.error.scaffoldAndTemplate', {})}`);
58
+ }
59
+ return { target, scaffold: scaffold ?? template, usedTemplateAlias: template !== undefined, from, lang };
55
60
  }
56
61
 
57
62
  async function directoryHasFile(directory, relativeFile) {
@@ -106,9 +111,10 @@ export async function runNewCommand(args, options = {}) {
106
111
  return { exitCode: 1 };
107
112
  }
108
113
 
109
- const { target, template, from, lang } = parsed;
114
+ const { target, scaffold, usedTemplateAlias, from, lang } = parsed;
115
+ if (usedTemplateAlias) logError(text('cli.new.notice.templateAlias'));
110
116
  const targetDir = path.resolve(cwd, target);
111
- const templateDir = template ? path.resolve(cwd, template) : assets.templateDir;
117
+ const templateDir = scaffold ? path.resolve(cwd, scaffold) : assets.templateDir;
112
118
  let playbookDir;
113
119
  if (from) {
114
120
  try { playbookDir = await resolvePlaybookDir(from, { cwd, targetDir, assets, env: options.env }); }
@@ -1,5 +1,6 @@
1
1
  import os from 'node:os';
2
2
  import path from 'node:path';
3
+ import fs from 'node:fs/promises';
3
4
  import { pathToFileURL } from 'node:url';
4
5
 
5
6
  import { cliText } from './i18n.mjs';
@@ -9,13 +10,13 @@ const usage = () => `${cliText('cli.playbook.help.usage')}\n${cliText('cli.playb
9
10
  const safeChannel = value => typeof value === 'string' && value.trim() && value.length <= 64
10
11
  && value !== '.' && !value.includes('..') && !/[/\\<>:"|?*\x00-\x1f]/.test(value);
11
12
 
12
- function parse(args) {
13
+ function parse(args, usageText = usage()) {
13
14
  const action = args[0];
14
15
  if (action === '--help' || action === '-h' || args.includes('--help') || args.includes('-h')) return { action: 'help' };
15
- if (!['list', 'apply', 'template'].includes(action)) throw new Error(usage());
16
+ if (!['list', 'apply', 'template'].includes(action)) throw new Error(usageText);
16
17
  const result = { action, id: action === 'apply' ? args[1] : null, project: action === 'template' ? args[1] : null };
17
- if (action === 'apply' && (!result.id || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(result.id))) throw new Error(usage());
18
- if (action === 'template' && !result.project) throw new Error(usage());
18
+ if (action === 'apply' && (!result.id || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(result.id))) throw new Error(usageText);
19
+ if (action === 'template' && !result.project) throw new Error(usageText);
19
20
  for (let i = action === 'apply' || action === 'template' ? 2 : 1; i < args.length; i++) {
20
21
  const arg = args[i];
21
22
  if ((action === 'list' && arg === '--json') || (action === 'apply' && arg === '--dry-run')) {
@@ -23,13 +24,13 @@ function parse(args) {
23
24
  } else if ((action === 'list' && ['--category', '--tag', '--channel'].includes(arg))
24
25
  || (action === 'apply' && arg === '--into')
25
26
  || (action === 'template' && ['--item', '--id', '--name', '--out', '--license-own'].includes(arg))) {
26
- if (!args[i + 1] || args[i + 1].startsWith('--')) throw new Error(usage());
27
+ if (!args[i + 1] || args[i + 1].startsWith('--')) throw new Error(usageText);
27
28
  result[arg.slice(2)] = args[++i];
28
- } else throw new Error(usage());
29
+ } else throw new Error(usageText);
29
30
  }
30
- if (action === 'apply' && !result.into) throw new Error(usage());
31
- if (action === 'template' && (!result.item || !result.id || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(result.id))) throw new Error(usage());
32
- if (result.channel && !safeChannel(result.channel)) throw new Error(usage());
31
+ if (action === 'apply' && !result.into) throw new Error(usageText);
32
+ if (action === 'template' && (!result.item || !result.id || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(result.id))) throw new Error(usageText);
33
+ if (result.channel && !safeChannel(result.channel)) throw new Error(usageText);
33
34
  return result;
34
35
  }
35
36
 
@@ -37,9 +38,12 @@ export async function runPlaybookCommand(args, options = {}) {
37
38
  const log = options.log ?? console.log;
38
39
  const error = options.error ?? console.error;
39
40
  let parsed;
40
- try { parsed = parse(args); }
41
+ try { parsed = parse(args, options.usage ?? usage()); }
41
42
  catch (cause) { error(cause.message); return { exitCode: 1 }; }
42
- if (parsed.action === 'help') { log(usage()); return { exitCode: 0 }; }
43
+ if (parsed.action === 'help') { log(options.usage ?? usage()); return { exitCode: 0 }; }
44
+ if (parsed.action === 'template' && !options.suppressTemplateAliasNotice) {
45
+ error(cliText('cli.playbook.template.aliasNotice'));
46
+ }
43
47
  try {
44
48
  const env = options.env ?? process.env;
45
49
  const cwd = options.cwd ?? process.cwd();
@@ -73,11 +77,17 @@ export async function runPlaybookCommand(args, options = {}) {
73
77
  category: parsed.category, tag: parsed.tag,
74
78
  onWarning: (dir, cause) => error(cliText('cli.playbook.warning.broken', { dir, message: cause.message })) });
75
79
  if (parsed.action === 'list') {
76
- if (parsed.json) log(JSON.stringify(entries));
77
- else for (const entry of entries) log(cliText('cli.playbook.list.row', { id: entry.id, name: entry.name,
80
+ const listed = options.listDepth === undefined ? entries : (await Promise.all(entries.map(async entry => {
81
+ try {
82
+ const book = JSON.parse(await fs.readFile(path.join(entry.dir, 'playbook.json'), 'utf8'));
83
+ return book.depth === options.listDepth ? entry : null;
84
+ } catch { return null; }
85
+ }))).filter(Boolean);
86
+ if (parsed.json) log(JSON.stringify(listed));
87
+ else for (const entry of listed) log(cliText('cli.playbook.list.row', { id: entry.id, name: entry.name,
78
88
  category: entry.category, source: entry.source,
79
89
  duration: entry.targetDurationSec ?? cliText('cli.playbook.list.durationUnknown') }));
80
- return { exitCode: 0, entries };
90
+ return { exitCode: 0, entries: listed };
81
91
  }
82
92
  const entry = entries.find(item => item.id === parsed.id);
83
93
  if (!entry) throw new Error(cliText('cli.playbook.error.notFound', { id: parsed.id }));
@@ -0,0 +1,21 @@
1
+ import { cliText } from './i18n.mjs';
2
+ import { runPlaybookCommand } from './playbook-command.mjs';
3
+
4
+ /** The template spelling shares export and list implementations with playbook. */
5
+ export async function runTemplateCommand(args, options = {}) {
6
+ const usage = cliText('cli.template.help.usage');
7
+ const log = options.log ?? console.log;
8
+ const error = options.error ?? console.error;
9
+ const [action, ...rest] = args;
10
+ if (action === '--help' || action === '-h' || args.includes('--help') || args.includes('-h')) {
11
+ log(usage);
12
+ return { exitCode: 0 };
13
+ }
14
+ if (action !== 'export' && action !== 'list') {
15
+ error(usage);
16
+ return { exitCode: 1 };
17
+ }
18
+ return runPlaybookCommand([action === 'export' ? 'template' : 'list', ...rest], {
19
+ ...options, usage, listDepth: action === 'list' ? 3 : undefined, suppressTemplateAliasNotice: true
20
+ });
21
+ }
@@ -1,5 +1,9 @@
1
1
  # AKARI Video 素材カタログ
2
2
 
3
+ アプリの画面では、ここに載るものは**素材**(音・3D・映像・フォントなど)の取得先です。
4
+ スタイル(字幕スタイル・LUT・つなぎ・動き)は素材とは別の棚で、コードが id で引く参照表として
5
+ [presets/](../presets/INDEX.md) にあります。まとまった「テンプレート」や「作り方」もここには入りません。
6
+
3
7
  このディレクトリは、`assets/` と同じ meta.json v0 契約を使う「取得先の索引」です。
4
8
  バイナリそのものはホストせず、各エントリの meta.json に `source`(取得先 URL・取得方法・
5
9
  ライセンス表記)と `remote: true` を持たせて、取得はユーザー自身の環境に委ねます。
@@ -23,17 +27,23 @@
23
27
  カテゴリは `assets/` と同じく**配布物の形**で切ります(2026-07-29 変更)。主題は tags です。
24
28
 
25
29
  - [scene3d](./scene3d/INDEX.md) — 製品モックアップなど、再生成が難しい 3D モデル・HDRI の取得先。3 件収録。
26
- - **overlay** — 映像に重ねる時間つき HTML 断片の取得先。整備中。0 件収録。
30
+ - **overlay**(画面の語は「動く部品」)— 映像に重ねる時間つき HTML 断片の取得先。整備中。0 件収録。
27
31
  - [audio](./audio/INDEX.md) — BGM・ジングルは AKARI Sounds が既定。効果音は外部の無料の参照ライブラリが中心。定番は `pack:audio-standard` タグで示し、パック台帳は [packs.json](./packs.json) を参照。29 件収録。
28
32
  - [broll](./broll/INDEX.md) — 主映像を補足する実写映像素材の取得先。1 件収録。
29
33
  - [font](./font/INDEX.md) — 特定の書体そのもの(グリフ)は生成不能なため、取得先の索引として扱う。31 件収録。
30
34
  - [avatars](./avatars/INDEX.md) — 性格・話し口調を核に 2D/3D/実写/音声を rendition として持つキャラクター登録。`rights.subject` が `original` / `third_party` のもののみ入庫可(実在人物は個人スコープへ)。**本カテゴリだけは meta.json v0 ではなく avatar registry v0(`packages/schemas/avatar.schema.json`)で検証する**別契約です(`docs/contract-2026-07-26-avatar-registry-v0.md`)。0 件収録。
31
35
 
36
+ ## カテゴリのほかに置いているもの
37
+
38
+ - [packs.json](./packs.json) — 定番のまとまり(`pack:` タグ)の台帳。フォントの定番パックと音の定番パックがある。
39
+ - [sites/](./sites/) — 外部の配布サイトごとの取得先(9 サイト)。各エントリの `source` が指す。
40
+ - [browser/browser-engines.json](./browser/browser-engines.json) — アプリ内ブラウザの画像検索エンジンの一覧。ダウンロードは受け付けない設定。
41
+
32
42
  ## ここに無いもの(2026-07-29 移設)
33
43
 
34
44
  テロップテンプレート(36 件)と LUT(2 件)は [presets/](../presets/INDEX.md) へ移しました。
35
45
  どちらも実体を持ち、人が選んでコピーするのではなく**コードが id でファイルを引く参照表**であり、
36
46
  「実体を持たない取得先の索引」というこのディレクトリの契約に合わなかったためです。
37
47
 
38
- - テロップ → ATF 描画は退役。HTML 素材版を Lab で取得してください。
39
- - LUT → [presets/luts/](../presets/luts/INDEX.md)(`edit.json` の `output.look.lut`)
48
+ - 字幕スタイル(旧テロップ)→ [presets/textstyle/](../presets/textstyle/INDEX.md)。テロップテンプレートの ATF 描画は退役し、HTML 素材版(動く部品)は Lab で取得します。
49
+ - LUT → [presets/luts/](../presets/luts/INDEX.md)(10 種。`edit.json` の `output.look.lut`)
@@ -101,8 +101,8 @@ updated: 2026-10-16
101
101
  |---|---|---|
102
102
  | CLI | `akari showcase list \| inspect <id> [--segment <id> \| --range <s>-<e>] [--json] \| capture <project> --id <id>` | **新設**(inspect = 区間の依存と手順を解決して出す。capture = 完成した 1 本を手元の作例にする) |
103
103
  | CLI | `akari new --from <id>`: **裸の id は今までどおり作り方(playbook)の棚で解決する**(変えない)。作例・テンプレートは `--from showcase:<id>[@<版>] [--segment <id>]` / `--from template:<id>` のように**接頭辞つきでだけ**指す(曖昧な解決順を作らない) | 既存に足す(接頭辞の形は showcase-v0 で確定) |
104
- | CLI | `akari template export \| list \| place`(template-v0 §6 の `akari playbook template` は別名として残す) | **改名** |
105
- | CLI | `akari new --scaffold <path>`(器を選ぶ)を新しい名前として足す。**旧 `--template` は別名として残し続ける**(読み取りは永続・使われたら 1 行の案内を出すだけ・廃止の版は本契約では決めない)。両方を同時に渡したら誤り | **別名を足す** |
104
+ | CLI | `akari template export \| list \| place`(template-v0 §6 の `akari playbook template` は別名として残す) | **改名** — export / list は **済 2026-10-17**(`list` は深さ 3 だけ。`place` は未) |
105
+ | CLI | `akari new --scaffold <path>`(器を選ぶ)を新しい名前として足す。**旧 `--template` は別名として残し続ける**(読み取りは永続・使われたら 1 行の案内を出すだけ・廃止の版は本契約では決めない)。両方を同時に渡したら誤り | **別名を足す** — **済 2026-10-17** |
106
106
  | CLI | `akari playbook list \| apply`・`akari recipe list \| plan`(AI 向け) | 維持 |
107
107
  | スキル | `capture-showcase`(完成した 1 本 + 元データ + 区間 + メモを手元の作例に登録する) | **新設** |
108
108
  | スキル | `create-from-showcase`(作例の区間から根拠を辿り、新規または既存のプロジェクトで作る) | **新設** |
@@ -139,6 +139,8 @@ updated: 2026-10-16
139
139
  | パック(Lab の束 / 記憶パック) | Lab の売り方だけ。記憶パック → **「記憶」の分類の中の種類名で呼ぶ(人物 / 単語帳)**。束を指すときは「記憶の束」。`memoryPack*` のキーは不変 |
140
140
  | 素材(部品 / 自分で撮った映像) | どちらも素材。出どころの印(自分の / Lab / 同梱)と場所(ライブラリ / プロジェクト)で分ける |
141
141
 
142
+ 英語(画面。2026-10-17 追記・正本は `docs/aliases.md` 冒頭): 動く部品 = Motion parts / 型 = type / 記憶の束 = memory collection / チャンネルの設定 = Channel settings / 字幕スタイル = Caption style / 使った土台 = Scaffold used / 自分のスタイル = My styles / レシピ(道具の手順)= Tool procedure。
143
+
142
144
  ## 9. データと置き場
143
145
 
144
146
  - **作例**: `showcase.json`(`version: 0`・`kind: "akari-showcase"`・`id`・`showcaseVersion`・`title`・`author`・`video`・`segments[]`・`sources`(edit.json と参照)・`playbook`(id@版)・`parts[]`・`license`・`provenance`・`preview`)。
@@ -151,7 +153,7 @@ updated: 2026-10-16
151
153
  ## 10. 移行の段取り
152
154
 
153
155
  1. **用語の正本 = 本契約**。代表 20 件(アプリと Lab)を §1 の 5 語に振り分けた表を `docs/` に添える(紙上の試行)
154
- 2. **画面の文言だけ**: §8 の行き先のうち、データを伴わないもの。**変えるのは文言の値だけ**で、i18n のキー・データの値(`category: overlay`・`kind: mystyle` 等)・ライブラリのタイルの key(`template` / `pack` / `mypresets`)は変えない。新しい文言はキーを足してよく、旧キーは残す(消す版は決めない)。CLI の usage も同じ扱い
156
+ 2. **画面の文言だけ**: §8 の行き先のうち、データを伴わないもの。**変えるのは文言の値だけ**で、i18n のキー・データの値(`category: overlay`・`kind: mystyle` 等)・ライブラリのタイルの key(`template` / `pack` / `mypresets`)は変えない。新しい文言はキーを足してよく、旧キーは残す(消す版は決めない)。CLI の usage も同じ扱い — **済 2026-10-17**(レーン `2026-10-17-vocabulary-wording`。ライブラリのホームの主タイルから「ひな形」と「セット」を外し、「テンプレート」の棚が唯一の入口・pack は詳細の「素材」に。英語の採用語は `docs/aliases.md` 冒頭)
155
157
  3. **ライブラリ**: 漏斗に「種類(素材 / スタイル / テンプレート)・尺あり・空き枠あり」、テンプレートの印。作り方の棚は作らない
156
158
  4. **ホーム**: 作り始める = 作例 + 作り方 + 白紙。作例の詳細に区間・開けるかの印・作り方
157
159
  5. **データとコマンド**: showcase-v0 契約 → `akari showcase`・2 つのスキル → `akari-template` の分離 → `--scaffold` → Lab の `kind` の列
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "akari-video",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "description": "AKARI Video launcher CLI — start an AI-edited video project from any directory: scaffold, connection check, then hand over to Claude Code (or opencode). AKARI Video を opencode や Claude Code で、どのディレクトリからでも始めるための `akari` ランチャー CLI。接続確認(doctor)→ 未セットアップならプロジェクト雛形を作成 → AI エージェントを起動する。外部 npm 依存ゼロ(Node.js 組み込みモジュールのみ)。 [akari-video npm vendor: bin/akari.mjs is reference-only. These CLI entrypoints are not included in the akari-video npm package. Use `akari doctor --json` and run the path reported in `render_cut.path`. Full installations provide it in a monorepo checkout, ~/.akari/app, /Applications/AKARI Video.app/Contents/Resources/packages, or %LOCALAPPDATA%\\Programs\\@akari-videoshell\\resources\\packages.]",
5
5
  "type": "module",
6
6
  "files": [
@@ -227,7 +227,7 @@
227
227
  "annotations.inspectorWidget.text.quitTheRest": "Stop the rest",
228
228
  "annotations.inspectorWidget.text.range": "Range",
229
229
  "annotations.inspectorWidget.text.reacquisitionFailed": "Couldn't retrieve the result again.",
230
- "annotations.inspectorWidget.text.recreateItUsingThisMethod": "Regenerate with these settings",
230
+ "annotations.inspectorWidget.text.recreateItUsingThisMethod": "Recreate with the same settings",
231
231
  "annotations.inspectorWidget.text.reference": "Reference {type}",
232
232
  "annotations.inspectorWidget.text.remove": "Remove {badge}",
233
233
  "annotations.inspectorWidget.text.removeEffect": "Remove effect",
@@ -562,7 +562,7 @@
562
562
  "annotations.timeline.myStyleSave.parts": "Parts to save",
563
563
  "annotations.timeline.myStyleSave.save": "Save",
564
564
  "annotations.timeline.myStyleSave.sfx": "Sound effects",
565
- "annotations.timeline.myStyleSave.title": "Save to My Styles",
565
+ "annotations.timeline.myStyleSave.title": "Save to my styles",
566
566
  "annotations.timeline.myStyleSave.usage": "When to use",
567
567
  "annotations.timeline.myStyleSave.usagePlaceholder": "Describe when to use this style",
568
568
  "annotations.timeline.placement.addTrackSuffix": " / add track above",
@@ -590,7 +590,7 @@
590
590
  "annotations.timeline.text.adjustingClips": "Adjusting clips",
591
591
  "annotations.timeline.text.afterPairingThemShiftTheVoicesOnThe": "After pairing them, shift the voices on the timeline and match them with the mouths. You can cut them together in the same position.",
592
592
  "annotations.timeline.text.againWithTheSameInputCostApproval": "Again with the same input (cost approval)",
593
- "annotations.timeline.text.alignTheOverlayFrame": "Align the overlay frame",
593
+ "annotations.timeline.text.alignTheOverlayFrame": "Align the motion part frame",
594
594
  "annotations.timeline.text.annotate": "Annotate {time}",
595
595
  "annotations.timeline.text.annotation": "Annotation",
596
596
  "annotations.timeline.text.appearance": "Appearance",
@@ -707,7 +707,7 @@
707
707
  "annotations.timeline.text.couldNotBeCollectedBecauseItCollidedWith_other": "Couldn't move {count} items because they would overlap the previous clip.",
708
708
  "annotations.timeline.text.couldNotBePlayedYouCanTryAgain": "Couldn't play. Select ▶ to try again.",
709
709
  "annotations.timeline.text.couldNotPlaceMaterialFromTrackHeaderRow": "Couldn't place asset from track header row to playhead {time}.",
710
- "annotations.timeline.text.couldNotPlaceOverlay": "Couldn't place overlay: {reason}",
710
+ "annotations.timeline.text.couldNotPlaceOverlay": "Couldn't place motion part: {reason}",
711
711
  "annotations.timeline.text.couldNotRedo": "Couldn't redo \"{action}\": {reason}",
712
712
  "annotations.timeline.text.couldNotUndo": "Couldn't undo '{action}': {reason}",
713
713
  "annotations.timeline.text.createACanvasHere": "Create a canvas here",
@@ -782,7 +782,7 @@
782
782
  "annotations.timeline.text.freezeCannotBeSetInEditJsonV0": "Freeze cannot be set in edit.json v0 using explicit at/track.",
783
783
  "annotations.timeline.text.generateAGap": "Generate a gap",
784
784
  "annotations.timeline.text.goToTheSoundLine": "Go to the sound line",
785
- "annotations.timeline.text.guessMyStyle": "Apply My Style",
785
+ "annotations.timeline.text.guessMyStyle": "Apply my style",
786
786
  "annotations.timeline.text.hasBeenRestored": "Undid {action}.",
787
787
  "annotations.timeline.text.hasChangedBeforeAndAfter": "{names} has changed before and after",
788
788
  "annotations.timeline.text.hideTrack": "Hide track",
@@ -799,14 +799,14 @@
799
799
  "annotations.timeline.text.iDeletedTheTransitionOverlappingClipsRemain": "Transition deleted. Clips still overlap.",
800
800
  "annotations.timeline.text.iDid": "{action} complete.",
801
801
  "annotations.timeline.text.iDidnTAddTheMaterialBecauseThe": "The project changed, so the asset was not added.",
802
- "annotations.timeline.text.iGuessedMyStyle": "My Style applied.",
802
+ "annotations.timeline.text.iGuessedMyStyle": "My style applied.",
803
803
  "annotations.timeline.text.iMadeItIntoACanvas": "Canvas created.",
804
804
  "annotations.timeline.text.iMovedThePlacedCharacter": "Text overlay moved.",
805
805
  "annotations.timeline.text.iPlacedAnEmptyFrame": "Empty frame added.",
806
806
  "annotations.timeline.text.iPlacedItOnANewTrackTo": "Placed on a new track to avoid overlap.",
807
807
  "annotations.timeline.text.iPlacedTheShape": "Shape added.",
808
808
  "annotations.timeline.text.iPlacedTheShapeOnANewTrack": "Shape added on a new track.",
809
- "annotations.timeline.text.iPutAnOverlay": "Overlay added.",
809
+ "annotations.timeline.text.iPutAnOverlay": "Motion part added.",
810
810
  "annotations.timeline.text.iScheduledAVideoInTheMeantime": "Planned video added between clips.",
811
811
  "annotations.timeline.text.iSlippedTheAudioClip": "Audio clip slipped.",
812
812
  "annotations.timeline.text.iSlippedTheClip": "Clip slipped.",
@@ -911,7 +911,7 @@
911
911
  "annotations.timeline.text.projectHasBeenSwitched": "Project has been switched",
912
912
  "annotations.timeline.text.projectIsNotOpen": "Project is not open.",
913
913
  "annotations.timeline.text.purchaseIsRequiredToUseThisMaterial": "Purchase is required to use this asset.",
914
- "annotations.timeline.text.putAnOverlay": "Put an overlay",
914
+ "annotations.timeline.text.putAnOverlay": "Put a motion part",
915
915
  "annotations.timeline.text.putOnCanvas": "Move into canvas",
916
916
  "annotations.timeline.text.putOut": "Put out",
917
917
  "annotations.timeline.text.rangeSeconds_one": "Range {duration} second",
@@ -930,9 +930,9 @@
930
930
  "annotations.timeline.text.rotateElementsInPreview": "Rotate elements in preview",
931
931
  "annotations.timeline.text.sClickToEdit": "({duration}s) — click to edit",
932
932
  "annotations.timeline.text.save": "Save",
933
- "annotations.timeline.text.saveToMyStyle": "Save to My Styles",
933
+ "annotations.timeline.text.saveToMyStyle": "Save to my styles",
934
934
  "annotations.timeline.text.saveTrackMute": "Save Track Mute",
935
- "annotations.timeline.text.savedToMyStyle": "Saved to My Style.",
935
+ "annotations.timeline.text.savedToMyStyle": "Saved to my style.",
936
936
  "annotations.timeline.text.seconds_one": "{duration} second",
937
937
  "annotations.timeline.text.seconds_other": "{duration} seconds",
938
938
  "annotations.timeline.text.seekedPreviewTo": "Seeked preview to {time}.",
@@ -1071,7 +1071,7 @@
1071
1071
  "annotations.timeline.text.unableToObtainActualScaleOfMaterial": "Couldn't obtain actual scale of asset.",
1072
1072
  "annotations.timeline.text.unableToOpenVolumeKeyframe": "Couldn't open volume keyframe: {reason}",
1073
1073
  "annotations.timeline.text.unableToPlace": "✕ Couldn't place",
1074
- "annotations.timeline.text.unableToPlaceOverlay": "Couldn't place overlay.",
1074
+ "annotations.timeline.text.unableToPlaceOverlay": "Couldn't place motion part.",
1075
1075
  "annotations.timeline.text.unableToPlaceShape": "Couldn't place shape: {reason}",
1076
1076
  "annotations.timeline.text.unableToReadReviewData": "Couldn't read review data: {reason}",
1077
1077
  "annotations.timeline.text.unableToReadStyle": "Couldn't read style.",
@@ -532,7 +532,7 @@
532
532
  "annotationscommon.editV2Mutations.error.audioSfxTrackMustBeNonnegativeInteger": "audio.sfx[].track must be a nonnegative integer.",
533
533
  "annotationscommon.materialTrialHistory.error.snapshotBeforeTrialDoesNotMatch": "The snapshot before the trial does not match.",
534
534
  "annotationscommon.materialTrialHistory.error.undoPreviousTrialFirst": "Undo the previous trial first.",
535
- "annotationscommon.overlayPlace.error.couldNotMeasureOverlaySize": "Could not measure the overlay size.",
535
+ "annotationscommon.overlayPlace.error.couldNotMeasureOverlaySize": "Could not measure the motion part size.",
536
536
  "annotationscommon.placeText.error.textOverlayPositionMustBeFrom0": "Text overlay position must be between 0 and 1.",
537
537
  "annotationscommon.placeText.error.checkTextOverlayStartEndTimes": "Check the text overlay start and end times.",
538
538
  "annotationscommon.previewCaptionWrap.error.invalidDuplicateDestination": "Invalid duplication destination.",
@@ -1,16 +1,16 @@
1
1
  {
2
- "cli.help.commands.recipe": " recipe list|plan List recipes or plan connectors",
2
+ "cli.help.commands.recipe": " recipe list|plan Inspect tool procedures and connectors",
3
3
  "cli.recipe.help.usage": "Usage: akari recipe list [--json] [--project <dir>] | akari recipe plan <id> [--project <dir>] [--json]",
4
4
  "cli.recipe.list.row": "{id} {name} Needs: {needs} Source: {source}",
5
- "cli.recipe.plan.header": "Recipe {id}: {name}",
6
- "cli.recipe.plan.recipeGates": "Recipe gates: {gates}",
5
+ "cli.recipe.plan.header": "Tool procedure {id}: {name}",
6
+ "cli.recipe.plan.recipeGates": "Tool procedure gates: {gates}",
7
7
  "cli.recipe.auth.unchecked": "unchecked",
8
8
  "cli.recipe.plan.row": "{capability}: {id} (auth: {auth}, gates: {gates})",
9
9
  "cli.recipe.plan.noGates": "none",
10
10
  "cli.recipe.plan.noCandidate": "No connector provides this capability (akari connect …)",
11
11
  "cli.recipe.plan.missingRow": "{capability}: {message}",
12
- "cli.recipe.error.notFound": "Recipe not found: {id}",
13
- "cli.recipe.error.schemasMissing": "Recipe validator is missing.",
12
+ "cli.recipe.error.notFound": "Tool procedure not found: {id}",
13
+ "cli.recipe.error.schemasMissing": "Tool procedure validator is missing.",
14
14
  "cli.recipe.error.connectionsMissing": "Default connections file is missing.",
15
15
  "cli.help.header.title": "AKARI Video — AI-powered video editing",
16
16
  "cli.help.header.usage": "Usage: akari [command] [options...]",
@@ -35,7 +35,7 @@
35
35
  "cli.help.developer.claude": " --claude, --claudecode Launch Claude Code explicitly",
36
36
  "cli.help.developer.yes": " -y, --yes Approve automatically (skip confirmation)",
37
37
  "cli.help.developer.version": " --version, -v Show installed versions",
38
- "cli.help.developer.new": " new <dir> Create a project from the template",
38
+ "cli.help.developer.new": " new <dir> Create an empty project",
39
39
  "cli.help.developer.init": " init Create or inspect the workspace folder",
40
40
  "cli.help.developer.other": " narration / assets / internal / capability See `akari <command> --help`",
41
41
  "cli.help.developer.help": " -h, --help Show this help",
@@ -87,13 +87,13 @@
87
87
  "cli.doctor.location.old": "old",
88
88
  "cli.doctor.location.both": "both",
89
89
  "cli.doctor.location.none": "none",
90
- "cli.new.help.usage": "Usage: akari new <target-dir> [--template <path>] [--lang <code>]",
90
+ "cli.new.help.usage": "Usage: akari new <target-dir> [--scaffold <path>] [--template <path> (alias for --scaffold)] [--lang <code>]",
91
91
  "cli.new.error.templateMissing": "--template requires a path.",
92
92
  "cli.new.error.invalidLanguage": "--lang requires a valid language code.",
93
93
  "cli.new.error.unknownOption": "Unknown option: {option}",
94
94
  "cli.new.error.multipleTargets": "Specify only one target directory.",
95
- "cli.new.error.templateUnavailable": "Project template not found.",
96
- "cli.new.error.templateNotFound": "Template not found: {path}",
95
+ "cli.new.error.templateUnavailable": "Project scaffold not found.",
96
+ "cli.new.error.templateNotFound": "Scaffold not found: {path}",
97
97
  "cli.new.warning.skillsMissing": "Skill sources not found; skipping bundled skills: {path}",
98
98
  "cli.new.label.undetected": "not detected",
99
99
  "cli.new.error.scaffoldMissing": "Project creation module not found.",
@@ -209,10 +209,10 @@
209
209
  "cli.launcher.project.uninitialized": "This folder has not been set up as an AKARI Video project: {root}",
210
210
  "cli.launcher.project.nonInteractive": "Noninteractive shell: finishing after the status check.",
211
211
  "cli.launcher.assets.migrationRetry": "Asset migration will be retried: {message}",
212
- "cli.launcher.project.templateMissing": "Project template not found; skipping scaffold creation.",
213
- "cli.launcher.project.creating": "Creating the project scaffold…",
212
+ "cli.launcher.project.templateMissing": "Project scaffold not found; skipped creation.",
213
+ "cli.launcher.project.creating": "Creating an empty project…",
214
214
  "cli.launcher.project.created": "Project created ({copied} files copied / {fallback} fallback files / git: {git}).",
215
- "cli.launcher.project.createFailed": "Could not create the project scaffold (continuing): {message}",
215
+ "cli.launcher.project.createFailed": "Could not create an empty project (continuing): {message}",
216
216
  "cli.launcher.project.existing": "Found an existing AKARI Video project: {root}",
217
217
  "cli.launcher.doctor.checking": "Checking connections…",
218
218
  "cli.project.git.initialCommit": "Create project",
@@ -434,7 +434,7 @@
434
434
  "cli.narration.error.whisperMissing": "whisper.cpp executable or model not found",
435
435
  "cli.narration.error.noLocalBackend": "No transcription backend is available on this computer (SpeechAnalyzer / whisper.cpp)",
436
436
  "cli.narration.error.audioOutside": "Audio path is outside the project",
437
- "cli.narration.error.irodoriVoiceUnknown": "Unknown Irodori voice recipe",
437
+ "cli.narration.error.irodoriVoiceUnknown": "Unknown Irodori voice settings",
438
438
  "cli.narration.error.customVoiceStyle": "A custom voice requires --style",
439
439
  "cli.narration.error.fishDefaultVoiceMissing": "Fish Audio has no default voice for this content language. Specify --voice or --profile",
440
440
  "cli.narration.error.scriptRequired": "--reading-file or --text is required",
@@ -785,7 +785,7 @@
785
785
  "cli.project.error.argument": "Invalid argument: {argument}",
786
786
  "cli.project.error.id": "Scene ID must contain lowercase letters, digits, and hyphens",
787
787
  "cli.project.error.project": "AKARI project not found: {path}",
788
- "cli.project.error.template": "Project template unavailable",
788
+ "cli.project.error.template": "Project scaffold not found",
789
789
  "cli.project.error.exists": "Scene already exists",
790
790
  "cli.project.result.sync": "Manifest synced: {counts} edge:{edges}",
791
791
  "cli.project.result.absent": "There is no manifest yet (run akari project sync to create one)",
@@ -807,5 +807,10 @@
807
807
  "cli.playbook.error.notFound": "Playbook not found: {id}",
808
808
  "cli.playbook.apply.dryRun": "Planned: {name} / {changes} / Review sheet: {report}",
809
809
  "cli.playbook.apply.applied": "Applied: {name} / {changes} / Review sheet: {report}",
810
- "cli.playbook.apply.noChanges": "No setting, placeholder, or beat changes"
810
+ "cli.playbook.apply.noChanges": "No setting, placeholder, or beat changes",
811
+ "cli.new.error.scaffoldMissingPath": "--scaffold requires a path.",
812
+ "cli.new.error.scaffoldAndTemplate": "--scaffold and --template cannot be used together.",
813
+ "cli.new.notice.templateAlias": "--template is an alias for --scaffold.",
814
+ "cli.template.help.usage": "Usage: akari template export <project> --item <group-item-id> --id <template-id> [--name <name>] [--out <dir>] [--license-own <license>] | akari template list [--json] [--category <category>] [--tag <tag>] [--channel <channel>]",
815
+ "cli.playbook.template.aliasNotice": "akari playbook template is an alias for akari template export."
811
816
  }
@@ -41,7 +41,7 @@
41
41
  "connect.connectState.ui.connectionWhoseKeyCannotDeletedError": "This connection has no key to delete.",
42
42
  "connect.connectState.ui.orderGenerationServicesIncorrectMessage": "The order of generation services is incorrect.",
43
43
  "connect.catalog.connector.akariVideoDescription": "Plan and edit videos",
44
- "connect.catalog.connector.recipesLabel": "3D Recipes",
44
+ "connect.catalog.connector.recipesLabel": "3D settings",
45
45
  "connect.catalog.connector.recipesDescription": "Create 3D assets with Blender",
46
46
  "connect.catalog.connector.falDescription": "Create images, videos, and voiceovers",
47
47
  "connect.catalog.connector.fishDescription": "Read a script aloud",
@@ -219,7 +219,7 @@
219
219
  "inspector.animatorFields.label.blurAmount": "Blur amount",
220
220
  "inspector.animatorFields.label.randomSeed": "Random seed",
221
221
  "inspector.animatorFields.error.up8Animators": "You can add up to eight animators.",
222
- "inspector.animatorFields.error.selectTemplate": "Select a template.",
222
+ "inspector.animatorFields.error.selectTemplate": "Select a style.",
223
223
  "inspector.animatorFields.error.selectAnimator": "Select an animator.",
224
224
  "inspector.animatorFields.error.placeAnimatorTopBottom": "Move the animator up or down.",
225
225
  "inspector.animatorFields.error.selectUnitFromList": "Select the unit from the list.",
@@ -379,7 +379,7 @@
379
379
  "inspector.captionPanels.label.recentStyles": "Recent styles",
380
380
  "inspector.captionPanels.label.textStyle": "Text style",
381
381
  "inspector.captionPanels.label.myStyle": "My style",
382
- "inspector.captionPanels.label.saveCurrentStyleMyStyle": "+ Save current style to My Style",
382
+ "inspector.captionPanels.label.saveCurrentStyleMyStyle": "+ Save current style to my style",
383
383
  "inspector.captionRunRows.label.color": "Color",
384
384
  "inspector.captionRunRows.label.weight": "Weight",
385
385
  "inspector.captionRunRows.label.size": "Size",
@@ -430,9 +430,9 @@
430
430
  "inspector.captionStyleEffects.label.textBackgroundOutline": "Text background + outline",
431
431
  "inspector.captionStyleEffects.error.rrggbb": "Enter a color in #RRGGBB format.",
432
432
  "inspector.captionStyleEffects.error.enterNumber0More": "Enter a nonnegative number.",
433
- "inspector.colorPanelHost.label.addedBrandKitAvailableEveryProject": "Added to the Brand Kit (available in every project).",
433
+ "inspector.colorPanelHost.label.addedBrandKitAvailableEveryProject": "Added to channel settings (available in every project).",
434
434
  "inspector.colorPanelHost.error.applyColor": "Could not apply the color.",
435
- "inspector.colorPanelHost.error.brandKitNotFound": "Brand kit not found.",
435
+ "inspector.colorPanelHost.error.brandKitNotFound": "Channel settings not found.",
436
436
  "inspector.colorPanelHost.error.readImage": "Could not read the image.",
437
437
  "inspector.colorPanel.title.back": "Back",
438
438
  "inspector.colorPanel.placeholder.searchBlue00C4Cc": "Search for ‘blue’ or ‘#00c4cc’",
@@ -444,12 +444,12 @@
444
444
  "inspector.colorPanel.action.chooseFavoriteColor": "Choose your favorite color",
445
445
  "inspector.colorPanel.label.transparentWithoutCoating": "Transparent (no fill)",
446
446
  "inspector.colorPanel.label.colorDesign": "Color of this design",
447
- "inspector.colorPanel.label.brandKit": "Brand kit",
447
+ "inspector.colorPanel.label.brandKit": "Channel settings",
448
448
  "inspector.colorPanel.action.close": "Done",
449
449
  "inspector.colorPanel.action.edit": "Edit",
450
450
  "inspector.colorPanel.label.noBrandColor": "No brand colors yet",
451
451
  "inspector.colorPanel.label.addBrandColor": "+ Add brand color",
452
- "inspector.colorPanel.title.addColorBrandKitAnyProjectCan": "Add this color to the Brand Kit (available in every project)",
452
+ "inspector.colorPanel.title.addColorBrandKitAnyProjectCan": "Add this color to channel settings (available in every project)",
453
453
  "inspector.colorPanel.label.colorPhoto": "Colors from photo",
454
454
  "inspector.colorPanel.label.defaultSingleColor": "Default single color",
455
455
  "inspector.colorPanel.label.collapse": "Collapse",
@@ -469,7 +469,7 @@
469
469
  "inspector.colorPanel.label.styleStyle": "Style",
470
470
  "inspector.colorPanel.label.minimumTwoColors": "At least two colors are required.",
471
471
  "inspector.colorPanel.action.removeColor": "Remove this color",
472
- "inspector.colorPanel.message.colorSingleSelectColorPress": "Only solid colors can be added to the Brand Kit. Select a solid color first.",
472
+ "inspector.colorPanel.message.colorSingleSelectColorPress": "Only solid colors can be added to channel settings. Select a solid color first.",
473
473
  "inspector.colorPanel.message.environmentCanNotUseSyringes": "The eyedropper is unavailable in this environment.",
474
474
  "inspector.colorPanel.message.enterColorNumberRrggbb": "Enter a color in #RRGGBB format.",
475
475
  "inspector.cropFields.error.enterFiniteCropValue": "Enter a finite crop value.",
@@ -714,9 +714,9 @@
714
714
  "inspector.animatorSection.label.allItems": "All items",
715
715
  "inspector.animatorSection.error.changeAnimator": "Could not change the animator.",
716
716
  "inspector.animatorSection.label.mechanismMoveCharactersOneCharacterOneWord": "Moves text one character or word at a time.",
717
- "inspector.animatorSection.label.startFromTemplate": "Start from a template",
717
+ "inspector.animatorSection.label.startFromTemplate": "Start from a style",
718
718
  "inspector.animatorSection.action.select": "Select…",
719
- "inspector.animatorSection.message.selectTemplate": "Select a template.",
719
+ "inspector.animatorSection.message.selectTemplate": "Select a style.",
720
720
  "inspector.animatorSection.label.addAnimator": "Add an animator",
721
721
  "inspector.animatorSection.label.animator": "Animator",
722
722
  "inspector.animatorSection.message.selectAnimatorFromList": "Select an animator from the list.",
@@ -1061,7 +1061,7 @@
1061
1061
  "inspector.selectionHeader.label.filter": "Filter",
1062
1062
  "inspector.selectionHeader.label.assets": "Assets",
1063
1063
  "inspector.selectionHeader.label.otherOperationsSubtitles": "More caption actions",
1064
- "inspector.selectionHeader.text.saveMyStyle": "Save to My Style…",
1064
+ "inspector.selectionHeader.text.saveMyStyle": "Save to my style…",
1065
1065
  "inspector.shapeFields.label.none": "None",
1066
1066
  "inspector.shapeFields.label.triangle": "Triangle",
1067
1067
  "inspector.shapeFields.label.chevron": "Chevron",
@@ -1238,9 +1238,9 @@
1238
1238
  "inspector.captionPanels.label.aaAi": "{weight} Aa",
1239
1239
  "inspector.captionStyleEffects.error.subtitleNotSubtitleData": "Caption {captionId} is missing from the caption data.",
1240
1240
  "inspector.colorModel.label.gradation": "Gradient ({colors})",
1241
- "inspector.colorPanelHost.error.brandKitsCouldNotBeSaved": "Could not save the Brand Kit: {error}",
1241
+ "inspector.colorPanelHost.error.brandKitsCouldNotBeSaved": "Could not save channel settings: {error}",
1242
1242
  "inspector.colorPanel.label.history": "{color} (history)",
1243
- "inspector.colorPanel.title.removeFromBrandKit": "Remove {color} from your brand kit",
1243
+ "inspector.colorPanel.title.removeFromBrandKit": "Remove {color} from channel settings",
1244
1244
  "inspector.colorPanel.title.returnColor": "Edit color {index}",
1245
1245
  "inspector.colorPanel.label.styleWithValue": "Style: {styleName}",
1246
1246
  "inspector.colorPanel.title.selectColor": "Select {label}",
@@ -9,7 +9,7 @@
9
9
  "lint.check.captions.outputDomainExceedsDuration": "An output-timed caption extends beyond the video duration. It will be clipped at the end during export.",
10
10
  "lint.check.cuts.trackOverlap": "Clips overlap on the same video track. Move them apart.",
11
11
  "lint.check.references.files": "A referenced asset file could not be found. Check its location or filename.",
12
- "lint.check.overlays.timeline": "An overlay is outside the video range. Adjust its position or the video duration.",
12
+ "lint.check.overlays.timeline": "A motion part is outside the video range. Adjust its position or the video duration.",
13
13
  "lint.check.audio.sfxTimeline": "A sound effect is outside the video range. Adjust its position or the video duration.",
14
14
  "lint.failure.detail.label": " Details: ",
15
15
  "lint.failure.prefix.validation": "Validation found problems after saving"
@@ -535,7 +535,7 @@
535
535
  "preview.previewWindow.canvas.roleLabel": "Role",
536
536
  "preview.previewWindow.canvas.roleSelectedTextLabel": "Role of selected text",
537
537
  "preview.previewWindow.canvas.rotateSelectedTextEightDegreesAction": "Rotate selected text by 8°",
538
- "preview.previewWindow.canvas.saveMyStylesAction": "Save to My Styles",
538
+ "preview.previewWindow.canvas.saveMyStylesAction": "Save to my styles",
539
539
  "preview.previewWindow.canvas.secondsDrawingReplaceThemEscCancelSuffix": " seconds. Drawing will replace them (Esc to cancel)",
540
540
  "preview.previewWindow.canvas.secondsReplacedEscCancelSuffix": " seconds will be replaced (Esc to cancel)",
541
541
  "preview.previewWindow.canvas.secondsSuffix": " seconds",