@henteko/kumiki
Version:
A video generation tool that creates videos from JSON configurations
620 lines (496 loc) • 12.5 kB
Markdown
# Kumiki
KumikiはJSONベースの設定ファイルから動画を自動生成するCLIツールです。シンプルな構成ファイルを使用して、テキスト、画像、動画、複合シーンを組み合わせた動画を作成できます。
## 特徴
- 📝 **JSONベースの設定**: 人間が読みやすいJSON形式で動画の構成を定義
- 🎬 **多様なシーンタイプ**: テキスト、画像、動画、複合シーンをサポート
- 🎵 **音声サポート**: BGM、ナレーション、AI音楽生成
- 🔄 **シーントランジション**: フェード、ワイプ、ディゾルブ効果
- 🗣️ **AI音声合成**: Google Gemini APIによるナレーション自動生成
- 🎼 **AI音楽生成**: Google Gemini APIによるBGM自動生成
- 🖼️ **AI画像生成**: Google Gemini APIによる画像自動生成
- 🔍 **スキーマ検証**: 設定ファイルの構文チェックと検証
- 💾 **インテリジェントキャッシュ**: 生成コンテンツの自動キャッシュと再利用
- 📋 **AI支援開発**: JSON Schemaを出力してAIツールと連携
## 必要条件
- Node.js 18.0.0以上
- FFmpeg(システムにインストール済みであること)
- Google Chrome(プレビュー機能用)
- Google Gemini APIキー(AI機能用)
## インストール
### npmからインストール(推奨)
```bash
npm install -g @henteko/kumiki
# インストール確認
kumiki --version
```
### ソースからビルド
```bash
# リポジトリをクローン
git clone https://github.com/henteko/kumiki.git
cd kumiki
# 依存関係をインストール
npm install
# ビルドとグローバルインストール
npm run build
npm link
kumiki --version
```
### 設定
Gemini APIキーを設定します(AI機能に必要):
```bash
kumiki config set gemini.apiKey YOUR_API_KEY
```
環境変数でも設定できます:
```bash
export GEMINI_API_KEY=YOUR_API_KEY
```
## 使い方
### 基本的なコマンド
#### 1. 新規プロジェクトの初期化
```bash
kumiki init [filename]
```
サンプルの設定ファイルを生成します。
オプション:
- `-f, --force`: 既存ファイルを上書き
- デフォルトのファイル名は `project.json`
#### 2. プロジェクトファイルの検証
```bash
kumiki validate <project.json>
```
設定ファイルの構文と内容を検証します。
#### 3. プレビュー
```bash
kumiki preview <project.json>
```
ブラウザで動画のプレビューを表示します(インタラクティブ)。
#### 4. 動画生成
```bash
kumiki generate <project.json> --output video.mp4
```
設定ファイルから動画を生成します。
オプション:
- `-o, --output <path>`: 出力ファイルパス(デフォルト: output.mp4)
- `-t, --temp-dir <path>`: 一時ファイルディレクトリ
- `-c, --concurrency <number>`: 並列処理数(デフォルト: 2)
- `--keep-temp`: 一時ファイルを保持
#### 5. スキーマ表示
```bash
kumiki show-schema [--include-examples]
```
KumikiプロジェクトのJSON Schemaを表示します。AIツールとの連携に便利です。
#### 6. 設定管理
```bash
# Gemini APIキーを設定
kumiki config set gemini.apiKey YOUR_API_KEY
# 設定値を取得
kumiki config get gemini.apiKey
# 設定値を削除
kumiki config unset gemini.apiKey
# すべての設定値を表示
kumiki config list
# 設定ファイルのパスを表示
kumiki config path
```
グローバル設定を管理します。設定は `~/.kumiki/config.json` に保存されます。
#### 7. キャッシュ管理
```bash
# キャッシュの状態を確認
kumiki cache status
# キャッシュサイズを表示
kumiki cache size
# キャッシュをクリア
kumiki cache clear
# 30日以上前のキャッシュのみクリア
kumiki cache clear --older-than 30d
```
生成された画像、音楽、ナレーションのキャッシュを管理します。
## プロジェクトファイルの構造
### 基本的な例
新規プロジェクトを開始する場合は、`kumiki init` コマンドを使用してサンプルファイルを生成できます:
```bash
kumiki init my-project.json
```
生成されるサンプルファイル:
```json
{
"version": "1.0.0",
"name": "My Awesome Video",
"settings": {
"resolution": "1920x1080",
"fps": 30,
"narrationDefaults": {
"voice": {
"languageCode": "en-US",
"name": "Journey",
"speakingRate": 1.0
},
"volumeMix": {
"narration": 0.8,
"bgm": 0.3
}
}
},
"audio": {
"backgroundMusic": {
"src": "generate://ambient piano music for presentation",
"volume": 0.7,
"fadeIn": 2,
"fadeOut": 3
}
},
"scenes": [
{
"id": "intro",
"type": "text",
"duration": 5,
"content": {
"text": "Hello, Kumiki!",
"style": {
"fontSize": 64,
"color": "#FFFFFF",
"fontFamily": "Arial",
"fontWeight": "bold",
"textAlign": "center"
},
"position": {
"x": "center",
"y": "center"
}
},
"background": {
"type": "gradient",
"value": "linear-gradient(45deg, #FC466B 0%, #3F5EFB 100%)"
},
"narration": {
"text": "Hello, Kumiki!"
}
},
{
"id": "generate-image",
"type": "image",
"duration": 10,
"content": {
"src": "generate://A beautiful sunset over the ocean with orange and pink sky",
"fit": "cover",
"position": { "x": "center", "y": "center" }
},
"narration": {
"text": "This is a beautiful sunset over the ocean with orange and pink sky generated by Gemini."
}
}
]
}
```
### シーンタイプ
#### テキストシーン
```json
{
"id": "text-1",
"type": "text",
"duration": 5,
"content": {
"text": "Hello World",
"style": {
"fontSize": 48,
"color": "#FFFFFF",
"fontFamily": "Arial",
"fontWeight": "bold",
"textAlign": "center"
},
"position": {
"x": "center",
"y": "center"
}
}
}
```
#### 画像シーン
```json
{
"id": "image-1",
"type": "image",
"duration": 3,
"content": {
"src": "assets/logo.png",
"fit": "contain",
"position": {
"x": "center",
"y": "center"
}
}
}
```
#### 動画シーン
```json
{
"id": "video-1",
"type": "video",
"duration": 10,
"content": {
"src": "assets/intro.mp4",
"trim": {
"start": 0,
"end": 10
}
}
}
```
#### 複合シーン
```json
{
"id": "composite-1",
"type": "composite",
"duration": 5,
"layers": [
{
"type": "image",
"content": {
"src": "assets/background.jpg",
"fit": "cover",
"position": { "x": "center", "y": "center" }
}
},
{
"type": "text",
"content": {
"text": "Overlay Text",
"style": {
"fontSize": 36,
"color": "#FFFFFF",
"fontFamily": "Arial"
},
"position": { "x": "center", "y": 100 }
},
"opacity": 0.9,
"zIndex": 1
}
]
}
```
### 背景設定
```json
{
"background": {
"type": "color",
"value": "#1a1a1a"
}
}
{
"background": {
"type": "gradient",
"value": "linear-gradient(45deg, #667eea 0%, #764ba2 100%)"
}
}
{
"background": {
"type": "image",
"value": "assets/background.jpg"
}
}
```
### トランジション
```json
{
"transition": {
"type": "fade",
"duration": 1.0
}
}
{
"transition": {
"type": "wipe",
"duration": 0.5,
"direction": "left"
}
}
```
### 音声設定
#### BGM(ファイルから)
```json
{
"audio": {
"backgroundMusic": {
"src": "assets/bgm.mp3",
"volume": 0.5,
"fadeIn": 2,
"fadeOut": 2
}
}
}
```
#### BGM(AI生成)
```json
{
"audio": {
"backgroundMusic": {
"src": {
"type": "generate",
"prompt": "穏やかで明るいピアノとストリングスのBGM",
"duration": 30,
"seed": 42
},
"volume": 0.5,
"fadeIn": 2,
"fadeOut": 2
}
}
}
```
### ナレーション
各シーンにナレーションを追加できます。音声は自動的にキャッシュされ、同じテキストと設定での再生成を避けます。
```json
{
"narration": {
"text": "この動画では新機能を紹介します。",
"voice": {
"languageCode": "ja-JP",
"name": "Kore",
"speakingRate": 1.0,
"pitch": 0,
"volumeGainDb": 0
},
"timing": {
"delay": 0.5,
"fadeIn": 0.3,
"fadeOut": 0.3
}
}
}
```
## AI支援開発
### Claude CodeやGemini CLIとの連携
```bash
# JSON Schemaを取得
kumiki show-schema --include-examples > schema.json
# AIツールに渡して動画構成を生成
# 例: "30秒の製品紹介動画を作成してください"
```
### スキーマ検証
```bash
# ajvを使用した検証例
kumiki show-schema > schema.json
ajv validate -s schema.json -d my-project.json
```
## 高度な使い方
### プロジェクト設定
```json
{
"settings": {
"resolution": "1920x1080",
"fps": 30,
"outputFormat": "mp4",
"quality": "high",
"narrationDefaults": {
"voice": {
"languageCode": "ja-JP",
"name": "Kore",
"speakingRate": 1.0
},
"volumeMix": {
"narration": 0.8,
"bgm": 0.3
}
},
"transitionDefaults": {
"type": "fade",
"duration": 0.5
}
}
}
```
### AI生成コンテンツ
#### 画像生成
```json
{
"content": {
"src": {
"type": "generate",
"prompt": "夕日に染まる富士山",
"style": "photorealistic",
"aspectRatio": "16:9"
}
}
}
```
#### 音楽生成
```json
{
"audio": {
"backgroundMusic": {
"src": {
"type": "generate",
"prompt": "エネルギッシュなロック調のBGM",
"duration": 60,
"config": {
"genre": "rock",
"tempo": "fast",
"mood": "energetic"
}
}
}
}
}
```
### キャッシュシステム
Kumikiは生成されたコンテンツ(画像、音楽、ナレーション)を自動的にキャッシュし、同じパラメータでの再生成を避けます。
- **画像キャッシュ**: プロンプト、スタイル、アスペクト比でキャッシュキーを生成
- **音楽キャッシュ**: プロンプト、長さ、設定でキャッシュキーを生成
- **ナレーションキャッシュ**: テキスト、音声設定でキャッシュキーを生成
キャッシュは `.kumiki-cache/` ディレクトリに保存されます。
## 開発
### セットアップ
```bash
# 依存関係のインストール
npm install
# スキーマの生成
npm run generate:schema
# 開発モードで実行
npm run dev
# ビルド
npm run build
# Lint
npm run lint
# 型チェック
npm run typecheck
```
### プロジェクト構造
```
kumiki/
├── src/
│ ├── cli.ts # CLIエントリーポイント
│ ├── commands/ # CLIコマンド
│ ├── core/ # コア機能
│ ├── scenes/ # シーンレンダラー
│ ├── services/ # 外部サービス連携
│ ├── schemas/ # TypeSpec定義
│ └── utils/ # ユーティリティ
├── examples/ # サンプルプロジェクト
└── internal-docs/ # 内部ドキュメント
```
## トラブルシューティング
### FFmpegが見つからない
```bash
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get install ffmpeg
# Windows
# FFmpeg公式サイトからダウンロードしてPATHに追加
```
### メモリ不足エラー
大きな動画を処理する場合:
```bash
NODE_OPTIONS="--max-old-space-size=8192" kumiki generate large-project.json
```
### キャッシュの問題
```bash
# キャッシュをクリア
kumiki cache clear
# 一時ファイルを確認
kumiki generate project.json --keep-temp
```
## ライセンス
Apache License 2.0
## 貢献
プルリクエストを歓迎します。大きな変更を行う場合は、まずissueを作成して変更内容について議論してください。