# アセットコマンド

> Nodaro CLI でキャラクター、ロケーション、オブジェクトを作成し、メイン画像を生成して承認し、各アセットにバリエーションとモーションクリップを追加します。

Source: https://nodaro.ai/ja/docs/developers/cli/asset-commands

Nodaro CLI の**アセットコマンド**は、キャラクター、ロケーション、オブジェクトを管理します。これらは、生成のたびに人物、場所、小道具を同じ状態に保つ、再利用可能なアイデンティティです。各アセットには、生成して承認するメイン画像があり、バリエーションとモーションクリップは後から追加します。同じアセットは、エディターの[**キャラクターアセット**（Character Asset）](https://nodaro.ai/docs/nodes/assets/character)、[**ロケーションアセット**（Location Asset）](https://nodaro.ai/docs/nodes/assets/location)、[**オブジェクト／小道具アセット**（Object/Props Asset）](https://nodaro.ai/docs/nodes/assets/object)ノードにも登場します。

## アセットの作り方
### レコードを作成する
`create` は、アセットの名前、説明、スタイルを保存します。

### 候補を生成する
`generate` は、候補となるメイン画像を 1、2、4 のいずれかの枚数で作成します。`--watch` を付けると、完了を待ちます。

### 1 つを承認する
`approve-portrait`（キャラクター用）または `approve-main-image`（ロケーションとオブジェクト用）は、完了した候補のジョブから、メイン画像を設定します。続けて Nodaro が、その画像からアセットの説明を作成します。

### バリエーションとモーションを追加する
`generate-asset` は、表情や季節のようなバリエーションを追加します。`generate-motion` は、メイン画像を短いクリップにアニメーション化します。

どの生成にも、エディターの対応するノードと同じようにクレジットがかかります。アセットがどうやってアイデンティティを安定させるかは、[キャラクターの一貫性](https://nodaro.ai/docs/guides/consistent-characters)を参照してください。

## キャラクター
```bash
nodaro characters list [--project <id>] [--archived] [--limit <n>] [--json]
nodaro characters get <id>
nodaro characters create --name <name> [--description "..."] [--gender <gender>] [--style realistic|anime|3d-pixar|illustration] [--base-outfit "..."] [--seed-prompt "..."] [--node-id <id>] [--project <id>]
nodaro characters update <id> [--name <name>] [--description "..."] [--gender <gender>] [--style realistic|anime|3d-pixar|illustration] [--base-outfit "..."] [--seed-prompt "..."]
nodaro characters delete <id>
nodaro characters restore <id>
nodaro characters duplicate <id> [--node-id <id>] [--project <id>]
nodaro characters usage <id>
nodaro characters generate <id> [--seed-prompt "..."] [--description "..."] [--name <name>] [--count 1|2|4] [--provider <p>] [--watch]
nodaro characters generate-asset <id> --asset-type expressions|poses|lighting|angles|headAngles|bodyAngles|custom --variant <name> [--user-prompt "..."] [--description "..."] [--column <col>] [--attach-name <name>] [--provider <p>] [--watch]
nodaro characters generate-motion <id> --motion-prompt "..." [--attach-name <name>] [--description "..."] [--motion-description "..."] [--provider <p>] [--watch]
nodaro characters approve-portrait <id> --job <jobId>
nodaro characters recaption <id>
```

| コマンド | 説明 |
| --- | --- |
| `list` | 自分のキャラクターを一覧表示します。`--archived` を付けると、アーカイブしたキャラクターを表示します。`--project` で、1 つのプロジェクトに絞り込みます。 |
| `delete` | キャラクターをアーカイブします。`restore` で元に戻せます。 |
| `duplicate` | キャラクターを新しいレコードにコピーします。 |
| `usage` | そのキャラクターを使っているワークフローを一覧表示します。 |
| `generate` | ポートレートの候補を 1、2、4 のいずれかの枚数で作成します。 |
| `approve-portrait` | 完了した候補のジョブからポートレートを設定し、続けてキャラクターの説明を作成します。 |
| `generate-asset` | バリエーションを 1 つ作成します。表情、ポーズ、ライティング、アングル、頭部のアングル、全身のアングル、カスタムのいずれかです。 |
| `generate-motion` | ポートレートをモーションクリップにアニメーション化します。 |
| `recaption` | 現在のポートレートから、説明を作成し直します。 |

## ロケーション
```bash
nodaro locations list [--archived] [--json]
nodaro locations get <id> [--json]
nodaro locations create <name> --node-id <id> [--description "..."] [--category indoor|outdoor|urban|nature|fantasy|sci-fi|historical|futuristic|other] [--style realistic|anime|3d-pixar|illustration] [--project <id>] [--json]
nodaro locations update <id> [--name <name>] [--description "..."] [--category <category>] [--style <style>] [--style-lock true|false] [--canonical-description "..."] [--expected-updated-at <iso>] [--json]
nodaro locations delete <id> [--json]
nodaro locations restore <id> [--json]
nodaro locations generate --name <name> [--description "..."] [--user-prompt "..."] [--category <category>] [--style <style>] [--provider <p>] [--count 1|2|4] [--attach-to-location-id <id>] [--watch] [--json]
nodaro locations generate-asset <id> --asset-type timeOfDay|weather|seasons|angles|lighting|custom --variant <name> [--user-prompt "..."] [--description "..."] [--column <col>] [--attach-name <name>] [--provider <p>] [--watch] [--json]
nodaro locations generate-motion --name <name> --motion-prompt "..." --source-image-url <url> [--provider kling|kling-turbo|kling-3.0|wan-i2v|wan-2.7-i2v|seedance-2] [--style realistic|anime|3d-pixar|illustration] [--canonical-description "..."] [--attach-to-location-id <id>] [--attach-name <name>] [--aspect-ratio 1:1|3:4|16:9|9:16] [--watch] [--json]
nodaro locations approve-main-image <id> --candidate-job-id <jobId> [--json]
nodaro locations recaption <id> [--json]
```

- `generate` は、候補となるエスタブリッシングショットを作成します。`--attach-to-location-id` を指定し、`--count` を 1 にすると、ジョブの完了時に、結果がロケーションのメイン画像になります。候補が複数の場合は、`approve-main-image` で 1 つを選びます。
- `generate-asset` は、バリエーションを 1 つ作成します。時間帯、天候、季節、アングル、ライティング、カスタムのいずれかです。
- `generate-motion` は、元になる画像を、一覧にある動画モデルのいずれかでクリップにアニメーション化します。
- `--style-lock` は、バリエーションの生成が、ロケーションの基準となるスタイルに固定されるかどうかを設定します。
- `--expected-updated-at` は、更新がより新しい変更を上書きしないように保護します。その時刻より後にレコードが変更されていた場合、更新は `concurrent_modification` で拒否されます。もう一度読み取ってから、再試行してください。

## オブジェクト
```bash
nodaro objects list [--project <id>] [--archived] [--json]
nodaro objects get <id> [--json]
nodaro objects create <name> --node-id <id> [--description "..."] [--category furniture|vehicle|weapon|food|clothing|electronics|nature|tool|animal|other] [--style realistic|anime|3d-pixar|illustration] [--project <id>] [--json]
nodaro objects update <id> [--name <name>] [--description "..."] [--category <category>] [--style <style>] [--style-lock true|false] [--canonical-description "..."] [--expected-updated-at <iso>] [--json]
nodaro objects delete <id> [--permanent] [--json]
nodaro objects restore <id> [--json]
nodaro objects generate --name <name> [--description "..."] [--user-prompt "..."] [--category <category>] [--style <style>] [--provider <p>] [--count 1|2|4] [--attach-to-object-id <id>] [--seed-prompt-hint "..."] [--watch] [--json]
nodaro objects generate-asset --asset-type angles|materials|variations|motion|custom --variant <name> --attach-to-object-id <id> [--attach-to-column <col>] [--name <name>] [--description "..."] [--seed-prompt-hint "..."] [--watch] [--json]
nodaro objects generate-motion --name <name> --motion-prompt "..." --source-image-url <url> [--provider kling-turbo|kling|kling-3.0|minimax|hailuo-2.3|wan-i2v|seedance|bytedance-lite] [--style realistic|anime|3d-pixar|illustration] [--canonical-description "..."] [--attach-to-object-id <id>] [--attach-name <name>] [--aspect-ratio 1:1|3:4|16:9|9:16|4:3] [--seed-prompt-hint "..."] [--watch] [--json]
nodaro objects approve-main-image <id> --candidate-job-id <jobId> [--expected-updated-at <iso>] [--json]
nodaro objects recaption <id> [--json]
```

- `delete` はオブジェクトをアーカイブします。`delete --permanent` は、すでにアーカイブされているオブジェクトを消去します。`restore` は、アーカイブしたオブジェクトを元に戻します。
- `generate` は、候補となるメイン画像を 1、2、4 のいずれかの枚数で作成します。`--attach-to-object-id` を指定し、`--count` を 1 にすると、ジョブの完了時に、結果がオブジェクトのメイン画像になります。
- `generate-asset` は、バリエーションを 1 つ作成し、指定したオブジェクトに関連付けます。アングル、素材、`variations`、モーション、カスタムのいずれかです。
- `generate-motion` は、オブジェクトのメイン画像をクリップにアニメーション化します。デフォルトのモデルは `kling-turbo`、デフォルトのアスペクト比は `1:1` です。

## 例：キャラクターを最初から最後まで作成する
```bash
# 1. Create the character
nodaro characters create --name Kira --description "young protagonist with auburn hair" \
  --style realistic --seed-prompt "kira portrait, warm natural lighting"

# 2. Generate four portrait candidates and wait for them
nodaro characters generate <characterId> --count 4 --watch

# 3. Approve the candidate you like
nodaro characters approve-portrait <characterId> --job <candidateJobId>

# 4. Add a smiling expression
nodaro characters generate-asset <characterId> --asset-type expressions --variant smile --watch
```

## Frequently asked questions

### CLI から、ポートレート付きのキャラクターを作成するにはどうすればよいですか？

nodaro characters create でレコードを作成し、nodaro characters generate と --count 4 でポートレートの候補を生成します。気に入った候補は、nodaro characters approve-portrait とそのジョブ ID で承認します。

### 削除したキャラクターは完全になくなりますか？

いいえ。delete はキャラクター、ロケーション、オブジェクトをアーカイブするだけで、restore コマンドで元に戻せます。完全に消去できるのはオブジェクトだけで、すでにアーカイブ済みのオブジェクトに delete --permanent を使います。

### アセットのバリエーションとは何ですか？

バリエーションとは、同じアセットの追加の画像のことです。たとえば、キャラクターの表情やポーズ、ロケーションの時間帯や季節、オブジェクトの素材などです。generate-asset コマンドで生成します。

### recaption は何をしますか？

現在のメイン画像から、アセットの説明を作成し直します。ポートレートやメイン画像の承認ですでに行われる処理なので、recaption を実行するのは、説明の作成に失敗した場合か、画像が変わった場合だけにしてください。
