akari-video 0.1.93 → 0.1.95

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "akari-video",
3
- "version": "0.1.93",
3
+ "version": "0.1.95",
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": {
@@ -234,7 +234,7 @@ function isFiniteNumber(value) {
234
234
  const VALUE_OPTIONS = new Set([
235
235
  "--project", "--engine", "--reading-file", "--script-file",
236
236
  "--t", "--gain-db", "--id", "--speaker", "--profile",
237
- "--voice", "--style", "--speed", "--text", "--caption-ref", "--irodori-url",
237
+ "--voice", "--style", "--speed", "--text", "--caption-ref", "--irodori-url", "--out",
238
238
  ]);
239
239
  const FLAG_OPTIONS = new Set(["--dry-run", "--yes", "--apply", "--json"]);
240
240
 
@@ -252,7 +252,7 @@ function parseArguments(argv) {
252
252
  id: null,
253
253
  speaker: "3",
254
254
  profile: null,
255
- voice: null, style: null, speed: null, text: null, captionRef: null, irodoriUrl: null, json: false,
255
+ voice: null, style: null, speed: null, text: null, captionRef: null, irodoriUrl: null, out: null, json: false,
256
256
  dryRun: false,
257
257
  yes: false,
258
258
  apply: false,
@@ -281,6 +281,7 @@ function parseArguments(argv) {
281
281
  case "--text": options.text = value; break;
282
282
  case "--caption-ref": options.captionRef = value; break;
283
283
  case "--irodori-url": options.irodoriUrl = value; break;
284
+ case "--out": options.out = value; break;
284
285
  default: break;
285
286
  }
286
287
  } else if (argument === "--dry-run") {
@@ -336,6 +337,26 @@ function parseArguments(argv) {
336
337
  }
337
338
 
338
339
  options.project = path.resolve(options.project);
340
+ if (options.out !== null) {
341
+ const out = options.out.replace(/\\/gu, '/');
342
+ if (options.apply || options.id || !/^assets\/generated\/candidates\/[A-Za-z0-9][A-Za-z0-9._-]*\/[A-Za-z0-9][A-Za-z0-9._-]*\.(?:wav|mp3)$/u.test(out)
343
+ || out.split('/').some(part => part === '..') || !out.endsWith(`.${extensionFor(options.engine)}`)) {
344
+ throw new PublicError('--out はプロジェクト内の未使用候補音声パスを指定してください', 2);
345
+ }
346
+ const directory = path.dirname(path.join(options.project, out));
347
+ const root = fs.realpathSync(options.project);
348
+ for (let parent = path.dirname(directory); parent !== options.project && parent.startsWith(`${options.project}${path.sep}`); parent = path.dirname(parent)) {
349
+ if (fs.existsSync(parent) && !fs.realpathSync(parent).startsWith(`${root}${path.sep}`)) {
350
+ throw new PublicError('候補の出力先がプロジェクト外です', 2);
351
+ }
352
+ }
353
+ fs.mkdirSync(directory, { recursive: true });
354
+ if (!fs.realpathSync(directory).startsWith(`${root}${path.sep}`)
355
+ || fs.existsSync(path.join(options.project, out)) || fs.existsSync(path.join(options.project, `${out}.meta.json`))) {
356
+ throw new PublicError('候補の出力先がプロジェクト外、または既存ファイルです', 2);
357
+ }
358
+ options.out = out;
359
+ }
339
360
  return options;
340
361
  }
341
362
 
@@ -1008,8 +1029,8 @@ async function runGenerate(options, io) {
1008
1029
  return 0;
1009
1030
  }
1010
1031
 
1011
- const id = options.id ?? computeNextId(options.project);
1012
- const relativePath = relativeOutputPath(id, options.engine);
1032
+ const id = options.out ? null : options.id ?? computeNextId(options.project);
1033
+ const relativePath = options.out ?? relativeOutputPath(id, options.engine);
1013
1034
  const outputPath = path.join(options.project, relativePath);
1014
1035
 
1015
1036
  let audioBuffer;
@@ -1107,7 +1128,8 @@ async function runGenerate(options, io) {
1107
1128
  }
1108
1129
 
1109
1130
  fs.mkdirSync(path.dirname(outputPath), { recursive: true });
1110
- fs.writeFileSync(outputPath, audioBuffer);
1131
+ if (options.out) fs.writeFileSync(outputPath, audioBuffer, { flag: 'wx' });
1132
+ else fs.writeFileSync(outputPath, audioBuffer);
1111
1133
  const duration = durationForAudio(audioBuffer, outputPath, options.engine, warnings);
1112
1134
 
1113
1135
  const entry = {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "akari-video",
3
- "version": "0.1.93",
3
+ "version": "0.1.95",
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": [
@@ -10,8 +10,8 @@
10
10
  "released": null,
11
11
  "license": {
12
12
  "badge": "conditional",
13
- "note": "提供経路の表示と利用規約に相違がある。",
14
- "source_url": "https://hailuoai.video/doc/terms-of-service.html"
13
+ "note": "fal では商用可と表示。MiniMax は消費者向けと開発者向けで規約が分かれ、後者の本文は未確認。",
14
+ "source_url": "https://www.minimax.io/terms-of-service-v2.html"
15
15
  },
16
16
  "verified": "documented",
17
17
  "measured_ref": null,
@@ -27,8 +27,8 @@
27
27
  "released": null,
28
28
  "license": {
29
29
  "badge": "conditional",
30
- "note": "提供経路の表示と利用規約に相違がある。",
31
- "source_url": "https://hailuoai.video/doc/terms-of-service.html"
30
+ "note": "fal では商用可と表示。MiniMax は消費者向けと開発者向けで規約が分かれ、後者の本文は未確認。",
31
+ "source_url": "https://www.minimax.io/terms-of-service-v2.html"
32
32
  },
33
33
  "verified": "documented",
34
34
  "measured_ref": null,
@@ -44,8 +44,8 @@
44
44
  "released": null,
45
45
  "license": {
46
46
  "badge": "conditional",
47
- "note": "商用プランと表示条件を確認。",
48
- "source_url": null
47
+ "note": "規約上、商用利用は原則禁止だが条件つきで容認。無許可の場合は Kling AI の表示が必要。",
48
+ "source_url": "https://kling.ai/docs/user-policy"
49
49
  },
50
50
  "verified": "documented",
51
51
  "measured_ref": null,
@@ -61,8 +61,8 @@
61
61
  "released": null,
62
62
  "license": {
63
63
  "badge": "conditional",
64
- "note": "商用プランと表示条件を確認。",
65
- "source_url": null
64
+ "note": "規約上、商用利用は原則禁止だが条件つきで容認。無許可の場合は Kling AI の表示が必要。",
65
+ "source_url": "https://kling.ai/docs/user-policy"
66
66
  },
67
67
  "verified": "documented",
68
68
  "measured_ref": null,
@@ -180,9 +180,9 @@
180
180
  "main": true,
181
181
  "released": null,
182
182
  "license": {
183
- "badge": "conditional",
184
- "note": "権利侵害の補償と帰属表示の条件に注意。",
185
- "source_url": "https://x.ai/legal/terms-of-service"
183
+ "badge": "credit-required",
184
+ "note": "帰属表示が必須。知的財産権の侵害に対する補償なし。",
185
+ "source_url": "https://x.ai/legal/brand-guidelines"
186
186
  },
187
187
  "verified": "documented",
188
188
  "measured_ref": null,
@@ -198,8 +198,8 @@
198
198
  "released": null,
199
199
  "license": {
200
200
  "badge": "conditional",
201
- "note": "AI 生成の表示を維持する条件がある。",
202
- "source_url": null
201
+ "note": "商用利用可。AI 生成の表示の除去・改ざんと、人物に重大な影響を与える用途は禁止。",
202
+ "source_url": "https://platform.vidu.com/docs/terms-of-use"
203
203
  },
204
204
  "verified": "documented",
205
205
  "measured_ref": null,
@@ -273,9 +273,9 @@
273
273
  "main": true,
274
274
  "released": null,
275
275
  "license": {
276
- "badge": "unknown",
277
- "note": "基盤モデルの商用条件を確認できていない。",
278
- "source_url": "https://antigravity.google/terms"
276
+ "badge": "conditional",
277
+ "note": "Antigravity は Gemini API 上で動き、商用条件は Gemini API 規約に準ずる。CLI との同一性は推定。",
278
+ "source_url": "https://ai.google.dev/gemini-api/terms"
279
279
  },
280
280
  "verified": "measured",
281
281
  "measured_ref": "2026-09-26-still-aspect-verify",
@@ -333,9 +333,9 @@
333
333
  "main": true,
334
334
  "released": null,
335
335
  "license": {
336
- "badge": "conditional",
337
- "note": "権利侵害の補償と帰属表示の条件に注意。",
338
- "source_url": "https://x.ai/legal/terms-of-service"
336
+ "badge": "credit-required",
337
+ "note": "帰属表示が必須。知的財産権の侵害に対する補償なし。",
338
+ "source_url": "https://x.ai/legal/brand-guidelines"
339
339
  },
340
340
  "verified": "measured",
341
341
  "measured_ref": "2026-09-26-still-aspect-verify",
@@ -459,8 +459,8 @@
459
459
  "released": null,
460
460
  "license": {
461
461
  "badge": "conditional",
462
- "note": "提供経路の表示と利用規約に相違がある。",
463
- "source_url": "https://hailuoai.video/doc/terms-of-service.html"
462
+ "note": "fal では商用可と表示。MiniMax は消費者向けと開発者向けで規約が分かれ、後者の本文は未確認。",
463
+ "source_url": "https://www.minimax.io/terms-of-service-v2.html"
464
464
  },
465
465
  "verified": "documented",
466
466
  "measured_ref": null,
@@ -544,7 +544,7 @@
544
544
  "released": null,
545
545
  "license": {
546
546
  "badge": "credit-required",
547
- "note": "キャラクターと合成方式に応じたクレジットが必要。",
547
+ "note": "VOICEVOX・Voiceger・MMVC などキャラ・方式ごとの書式でクレジット必須。動画内か概要欄の一方に記載し、省略には 1 キャラ 40 万円 + 税の別契約が必要。",
548
548
  "source_url": "https://voicevox.hiroshiba.jp/term/"
549
549
  },
550
550
  "verified": "documented",
@@ -665,9 +665,9 @@
665
665
  "main": true,
666
666
  "released": null,
667
667
  "license": {
668
- "badge": "unknown",
669
- "note": "文字起こし用途の商用条件は未確認。",
670
- "source_url": null
668
+ "badge": "commercial-ok",
669
+ "note": "whisper.cpp 本体と Whisper モデルはともに MIT。ローカル実行のため API 規約は対象外。",
670
+ "source_url": "https://github.com/openai/whisper/blob/main/LICENSE"
671
671
  },
672
672
  "verified": "documented",
673
673
  "measured_ref": null,
@@ -705,8 +705,8 @@
705
705
  "released": null,
706
706
  "license": {
707
707
  "badge": "unknown",
708
- "note": "文字起こし用途の商用条件は未確認。",
709
- "source_url": null
708
+ "note": "ElevenLabs の一般規約では無料は非商用、有料は商用可。Scribe にも適用されるとみられるが、固有条項は未確認。",
709
+ "source_url": "https://elevenlabs.io/terms-of-use"
710
710
  },
711
711
  "verified": "documented",
712
712
  "measured_ref": null,
@@ -899,9 +899,9 @@
899
899
  "main": true,
900
900
  "released": null,
901
901
  "license": {
902
- "badge": "unknown",
903
- "note": "商用条件の資料がない。",
904
- "source_url": null
902
+ "badge": "commercial-ok",
903
+ "note": "商用利用可。出力の権利は利用者に帰属。",
904
+ "source_url": "https://openai.com/policies/terms-of-use/"
905
905
  },
906
906
  "verified": "documented",
907
907
  "measured_ref": null,
@@ -954,9 +954,9 @@
954
954
  "main": false,
955
955
  "released": null,
956
956
  "license": {
957
- "badge": "unknown",
958
- "note": "商用条件の資料がない。",
959
- "source_url": null
957
+ "badge": "commercial-ok",
958
+ "note": "商用利用可。出力の権利は利用者に帰属。",
959
+ "source_url": "https://openai.com/policies/terms-of-use/"
960
960
  },
961
961
  "verified": "documented",
962
962
  "measured_ref": null,
@@ -1009,9 +1009,9 @@
1009
1009
  "main": true,
1010
1010
  "released": null,
1011
1011
  "license": {
1012
- "badge": "conditional",
1013
- "note": "権利侵害の補償と帰属表示の条件に注意。",
1014
- "source_url": "https://x.ai/legal/terms-of-service"
1012
+ "badge": "credit-required",
1013
+ "note": "帰属表示が必須。知的財産権の侵害に対する補償なし。",
1014
+ "source_url": "https://x.ai/legal/brand-guidelines"
1015
1015
  },
1016
1016
  "verified": "documented",
1017
1017
  "measured_ref": null,
@@ -1066,9 +1066,9 @@
1066
1066
  "main": true,
1067
1067
  "released": "2025-02-15",
1068
1068
  "license": {
1069
- "badge": "unknown",
1070
- "note": "Image-01 の商用条件は確認できていない。",
1071
- "source_url": null
1069
+ "badge": "conditional",
1070
+ "note": "fal では商用可と表示。MiniMax は消費者向けと開発者向けで規約が分かれ、後者の本文は未確認。",
1071
+ "source_url": "https://www.minimax.io/terms-of-service-v2.html"
1072
1072
  },
1073
1073
  "verified": "documented",
1074
1074
  "measured_ref": null,
@@ -1115,9 +1115,9 @@
1115
1115
  "main": true,
1116
1116
  "released": null,
1117
1117
  "license": {
1118
- "badge": "unknown",
1119
- "note": "この版の商用条件は未確認。",
1120
- "source_url": null
1118
+ "badge": "conditional",
1119
+ "note": "無印の Qwen-Image は Apache 2.0。Qwen-Image 2.0 自体のライセンス表記は未確認。",
1120
+ "source_url": "https://huggingface.co/Qwen/Qwen-Image"
1121
1121
  },
1122
1122
  "verified": "documented",
1123
1123
  "measured_ref": null,
@@ -1233,8 +1233,8 @@
1233
1233
  "released": null,
1234
1234
  "license": {
1235
1235
  "badge": "conditional",
1236
- "note": "提供経路の表示と利用規約に相違がある。",
1237
- "source_url": "https://hailuoai.video/doc/terms-of-service.html"
1236
+ "note": "fal では商用可と表示。MiniMax は消費者向けと開発者向けで規約が分かれ、後者の本文は未確認。",
1237
+ "source_url": "https://www.minimax.io/terms-of-service-v2.html"
1238
1238
  },
1239
1239
  "verified": "documented",
1240
1240
  "measured_ref": null,
@@ -1286,8 +1286,8 @@
1286
1286
  "released": null,
1287
1287
  "license": {
1288
1288
  "badge": "conditional",
1289
- "note": "提供経路の表示と利用規約に相違がある。",
1290
- "source_url": "https://hailuoai.video/doc/terms-of-service.html"
1289
+ "note": "fal では商用可と表示。MiniMax は消費者向けと開発者向けで規約が分かれ、後者の本文は未確認。",
1290
+ "source_url": "https://www.minimax.io/terms-of-service-v2.html"
1291
1291
  },
1292
1292
  "verified": "documented",
1293
1293
  "measured_ref": null,
@@ -1344,8 +1344,8 @@
1344
1344
  "released": "2026-01-23",
1345
1345
  "license": {
1346
1346
  "badge": "conditional",
1347
- "note": "提供経路の表示と利用規約に相違がある。",
1348
- "source_url": "https://hailuoai.video/doc/terms-of-service.html"
1347
+ "note": "fal では商用可と表示。MiniMax は消費者向けと開発者向けで規約が分かれ、後者の本文は未確認。",
1348
+ "source_url": "https://www.minimax.io/terms-of-service-v2.html"
1349
1349
  },
1350
1350
  "verified": "documented",
1351
1351
  "measured_ref": null,