# 에셋 명령

> Nodaro CLI로 캐릭터, 장소, 오브젝트를 만들고, 검색하고, 학습시키고, 대표 이미지를 승인하고, 각 에셋에 베리언트와 모션 클립을 추가하는 방법입니다.

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

Nodaro CLI의 **에셋 명령**은 캐릭터, 장소, 오브젝트를 관리합니다. 에셋은 사람, 장소, 소품을 모든 생성에서 같은 모습으로 유지하는, 다시 쓸 수 있는 정체성입니다. 각 에셋에는 생성해서 승인하는 대표 이미지가 있고, 나중에 추가하는 베리언트와 모션 클립이 있습니다. 같은 에셋이 편집기의 [캐릭터 에셋](https://nodaro.ai/docs/nodes/assets/character), [장소 에셋](https://nodaro.ai/docs/nodes/assets/location), [오브젝트/소품 에셋](https://nodaro.ai/docs/nodes/assets/object) 노드에도 나타납니다.

## 에셋을 만드는 과정
### 기록 만들기
`create`는 에셋의 이름, 설명, 스타일을 저장합니다.

### 후보 생성
`generate`는 대표 이미지 후보를 1개, 2개 또는 4개 만듭니다. 후보를 기다리려면 `--watch`를 추가하세요.

### 하나 승인
`approve-portrait`(캐릭터) 또는 `approve-main-image`(장소와 오브젝트)는 완료된 후보 작업으로 대표 이미지를 정합니다. 그런 다음 Nodaro가 그 이미지로 에셋의 설명을 씁니다.

### 베리언트와 모션 추가
`generate-asset`은 표정이나 계절 같은 베리언트를 추가합니다. `generate-motion`은 대표 이미지를 짧은 클립으로 움직입니다.

생성할 때마다 편집기의 해당 노드처럼 크레딧이 듭니다. 에셋이 정체성을 안정적으로 유지하는 방식은 [일관된 캐릭터](https://nodaro.ai/docs/guides/consistent-characters)를 참고하세요.

## 캐릭터
```bash
nodaro characters list [--project <id>] [--archived] [--search <words> | --q <words>] [--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>
nodaro characters train <id> [--image <url> ...] [--watch] [--poll-interval <ms>] [--json]
nodaro characters training <id> [--watch] [--poll-interval <ms>] [--json]
nodaro characters delete-lora <id> [--json]
```

| 명령 | 기능 |
| --- | --- |
| `list` | 내 캐릭터 목록을 보여 주거나, `--archived`를 쓰면 보관된 캐릭터를 보여 줍니다. `--project`는 목록을 프로젝트 하나로 좁힙니다. `--search` 또는 `--q`는 이름이나 설명에 모든 단어가 들어 있는 캐릭터만 남깁니다. 단어는 최대 5개이며 대소문자를 구분하지 않습니다. 각 단어는 와일드카드 없이 쓴 그대로 일치합니다. |
| `delete` | 캐릭터를 보관합니다. `restore`로 되살립니다. |
| `duplicate` | 캐릭터를 새 기록으로 복사합니다. |
| `usage` | 캐릭터를 쓰는 워크플로를 나열합니다. |
| `generate` | 포트레이트 후보를 1개, 2개 또는 4개 만듭니다. |
| `approve-portrait` | 완료된 후보 작업으로 포트레이트를 정한 다음, 그 포트레이트로 캐릭터의 설명을 씁니다. |
| `generate-asset` | 베리언트 하나를 만듭니다. 표정, 포즈, 조명, 앵글, 머리 앵글, 전신 앵글 또는 사용자 지정 베리언트입니다. |
| `generate-motion` | 포트레이트를 모션 클립으로 움직입니다. |
| `recaption` | 현재 포트레이트로 설명을 다시 씁니다. |
| `train` | Nodaro Cloud에서 캐릭터의 고충실도 학습을 시작합니다. `--image`를 반복하면 그 이미지로만 학습하며, 4장 이상이어야 합니다. `--watch`는 학습 작업을 따라갑니다. |
| `training` | 학습 상태를 보여 줍니다. 상태는 `untrained`, `queued`, `training`, `succeeded`, `failed`, `cancelled` 중 하나입니다. `--watch`를 쓰면 성공 시 `0`, 학습이 실패했거나 시작되지 못했으면 `2`, 취소되었거나 제거되었으면 `130`으로 종료합니다. |
| `delete-lora` | 학습된 모델을 제거합니다. 진행 중인 학습은 취소되고 크레딧이 환불됩니다. 되돌릴 수 없습니다. |

학습 한 번에 1,650크레딧이 들고, 약 15분이 걸리며, 실패하면 크레딧이 환불됩니다. 다시 학습하면 다시 전체 가격이 듭니다. [캐릭터 학습](https://nodaro.ai/docs/guides/character-training)을 참고하세요.

## 장소
```bash
nodaro locations list [--archived] [--search <words> | --q <words>] [--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]
```

- `list --search` 또는 `--q`는 캐릭터와 마찬가지로 이름이나 설명에 모든 단어가 들어 있는 장소만 남깁니다.
- `generate`는 설정 샷 후보를 만듭니다. `--attach-to-location-id`와 개수 1을 쓰면 작업이 완료될 때 결과가 장소의 대표 이미지가 됩니다. 후보가 더 많으면 `approve-main-image`로 하나를 고르세요.
- `generate-asset`은 베리언트 하나를 만듭니다. 시간대, 날씨, 계절, 앵글, 조명 또는 사용자 지정 베리언트입니다.
- `generate-motion`은 나열된 동영상 모델 중 하나로 원본 이미지를 클립으로 움직입니다.
- `--style-lock`은 베리언트 생성이 장소의 기준 스타일에 고정될지 정합니다.
- `--expected-updated-at`은 수정이 더 새로운 변경을 덮어쓰지 않도록 막습니다. 그 시각 이후 기록이 바뀌었다면 수정은 `concurrent_modification`으로 거부됩니다. 다시 읽은 뒤 다시 시도하세요.

## 오브젝트
```bash
nodaro objects list [--project <id>] [--archived] [--search <words> | --q <words>] [--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]
```

- `list --search` 또는 `--q`는 캐릭터와 마찬가지로 이름이나 설명에 모든 단어가 들어 있는 오브젝트만 남깁니다.
- `delete`는 오브젝트를 보관합니다. `delete --permanent`는 이미 보관된 오브젝트를 영구 삭제합니다. `restore`는 보관된 오브젝트를 되살립니다.
- `generate`는 대표 이미지 후보를 1개, 2개 또는 4개 만듭니다. `--attach-to-object-id`와 개수 1을 쓰면 작업이 완료될 때 결과가 오브젝트의 대표 이미지가 됩니다.
- `generate-asset`은 지정한 오브젝트에 붙는 베리언트 하나를 만듭니다. 앵글, 재질, 변형, 모션 또는 사용자 지정 베리언트입니다.
- `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
```

## 자주 묻는 질문

### CLI로 포트레이트가 있는 캐릭터를 만들려면 어떻게 하나요?

nodaro characters create로 기록을 만들고, nodaro characters generate에 --count 4를 붙여 포트레이트 후보를 생성한 다음, 마음에 드는 후보의 작업 ID와 함께 nodaro characters approve-portrait로 승인하세요.

### 삭제한 캐릭터는 영구히 사라지나요?

아니요. 삭제하면 캐릭터, 장소, 오브젝트가 보관되며, restore 명령으로 되살릴 수 있습니다. 영구 삭제는 오브젝트만 가능하며, 이미 보관된 오브젝트에 delete --permanent를 실행하면 됩니다.

### 에셋의 베리언트란 무엇인가요?

베리언트는 같은 에셋의 추가 이미지입니다. 캐릭터의 표정이나 포즈, 장소의 시간대나 계절, 오브젝트의 재질 같은 것입니다. generate-asset 명령으로 생성하세요.

### CLI로 캐릭터를 학습시키려면 어떻게 하나요?

Nodaro Cloud에서 캐릭터 ID와 --watch를 붙여 nodaro characters train을 실행하세요. 학습 한 번에 1,650크레딧이 들고, 약 15분이 걸리며, 실패하면 크레딧이 환불됩니다.

### recaption은 무엇을 하나요?

에셋의 현재 대표 이미지로 설명을 다시 씁니다. 포트레이트나 대표 이미지를 승인하면 이미 설명이 작성되므로, 그 설명 작성이 실패했거나 이미지가 바뀌었을 때만 recaption을 실행하세요.
