veogent 1.0.15 → 1.0.16

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/README.md CHANGED
@@ -76,7 +76,7 @@ Queue generation jobs directly from the terminal.
76
76
  *Note: VEOGENT uses strict validation depending on the request type.*
77
77
 
78
78
  ```bash
79
- # Generate Image (Supports: imagen4, imagen3.5)
79
+ # Generate Image (Supports: imagen3.5)
80
80
  veogent request -t "GENERATE_IMAGES" -p <proj> -c <chap> -s <scene> -i "imagen4"
81
81
 
82
82
  # Generate Video (Supports: veo_3_1_fast, veo_3_1_fast_r2v)
@@ -94,12 +94,7 @@ veogent upscale -p <proj> -c <chap> -s <scene> -o "VERTICAL" -r "VIDEO_RESOLUTIO
94
94
 
95
95
  ## 🤖 For AI Agents
96
96
 
97
- Veogent CLI comes with a built-in guide optimized for LLM/Coding Agents context processing. Just run:
98
-
99
- ```bash
100
- veogent skill
101
- ```
102
- This prints out a comprehensive Markdown `SKILL.md` cheat sheet defining our exact DTO validations, model enumerations, logic pipelines, and required variables for orchestrating complete projects without hitting `400 Bad Request`.
97
+ Veogent CLI ships with a comprehensive **[`skills/SKILL.md`](./skills/SKILL.md)** guide optimized for LLM/Coding Agents context processing. It defines exact DTO validations, model enumerations, camera prompting techniques, the full production pipeline, and error handling — everything an agent needs to orchestrate complete projects without hitting `400 Bad Request`.
103
98
 
104
99
  ### Recommended Agent Workflow (Production)
105
100
 
@@ -127,6 +122,8 @@ This prints out a comprehensive Markdown `SKILL.md` cheat sheet defining our exa
127
122
  9. Generate video only after matching-orientation image exists successfully:
128
123
  - `veogent request -t "GENERATE_VIDEO" ...`
129
124
 
125
+ > 📖 For the full detailed guide with all commands, options tables, and examples, see **[`skills/SKILL.md`](./skills/SKILL.md)**.
126
+
130
127
  **Important:** `veogent requests` is the primary status board for image/video/edit workflows.
131
128
 
132
129
  **Concurrency:** maximum **5** requests can be processed simultaneously. If the API reports maximum limit reached, treat it as queue-full (wait/retry), not a hard failure.
package/index.js CHANGED
@@ -473,115 +473,6 @@ program
473
473
  });
474
474
 
475
475
  // --- System ---
476
- program
477
- .command('skill')
478
- .description('Print the native Agent SKILL.md guide for VEOGENT CLI')
479
- .action(() => {
480
- const skillContent = `# VEOGENT CLI Agent Skill
481
-
482
- The \`veogent\` command-line interface interacts with the VEOGENT API for managing movie/story projects, chapters, scenes, and media generation requests (images, videos).
483
- This CLI is designed with AI agents in mind: all data outputs are in raw JSON format for easy parsing and chaining.
484
-
485
- ## 🛠 Authentication & Configuration
486
- Agents **CANNOT** authenticate automatically because \`veogent login\` opens a local browser for Google Firebase OAuth.
487
- * **Check Auth & Config:** \`veogent status\`
488
- * **Setup Integration:** If a new Google Flow token needs to be applied, use \`veogent setup-flow -f "ya29.xx" -t "PAYGATE_TIER_TWO"\`.
489
- *(Note: If any VEOGENT API request fails with a \`"status code 401"\` Flow error, the Flow Key has expired. Prompt the user for a new key and update it via \`setup-flow\` before retrying).*
490
- * **Action:** If status returns \`{"error": "Not logged in"}\`, instruct the user to run \`veogent login\` on their desktop terminal manually. Wait for them to confirm success.
491
-
492
- ## 📁 Projects & Assets
493
- * **List Image Materials:** \`veogent image-materials\` (e.g., \`CINEMATIC\`, \`PIXAR_3D\`) -> *(Call this to get allowed material options before creating a project).*
494
- * **List Custom Prompts:** \`veogent custom-prompts\` -> *(Call this to find a matching ID if a custom stylistic prompt is needed).*
495
- * **List Projects:** \`veogent projects\`
496
- * *Note: IDs are Firebase Document Strings (e.g., \`APQF6Ay0kLeXLhpctTdD\`), not simple integers. Always use the field \`"id"\` from the JSON response array.*
497
- * **Get Project Details:** \`veogent project <projectId>\`
498
- * **Create Project:** \`veogent create-project -n "Name" -k "Scifi" -d "Description" -l "English" -m "Anime style" -c 1 -C "customPromptId"\`
499
- *(Requires image material. Optionally pass \`-C <customPromptId>\` if listed via \`custom-prompts\`)*
500
-
501
- ## 📖 Chapters & Scenes
502
- * **List Chapters for a Project:** \`veogent chapters <projectId>\`
503
- * **List Recent Chapters globally:** \`veogent recent-chapters -l 5\`
504
- * **List Scenes for a Chapter:** \`veogent scenes <projectId> <chapterId>\`
505
- * **Create Chapter Content:** \`veogent create-chapter-content -p <projectId> -c <chapterId> -s 5\` (Generates text/story content for 5 scenes)
506
- * **Create Scene (from script list):** \`veogent create-scene -p <projectId> -c <chapterId> -C "scene script 1" "scene script 2" --flowkey\`
507
-
508
- ## 🎬 Generation Requests
509
- To initiate generation jobs, use \`veogent request\`.
510
- **CRITICAL VALIDATION RULES (Strict DTO):**
511
- Do not pass unsupported flags for a specific type, or the server will return a \`400 Bad Request\` or \`Validation Error\`.
512
-
513
- 1. **Generate Images** (\`GENERATE_IMAGES\`):
514
- * **Required Options:** \`-t GENERATE_IMAGES\`, \`-p <proj>\`, \`-c <chap>\`, \`-s <scene>\`, \`-i <imagemodel>\`
515
- * **Allowed Models:** \`imagen4\`, \`imagen3.5\`
516
- * **Prohibited:** Do NOT pass \`-o\` (orientation) or \`-v\` (videomodel) or \`-S\` (speed).
517
- * \`veogent request -t "GENERATE_IMAGES" -p "projID" -c "chapID" -s "sceneID" -i "imagen4"\`
518
-
519
- 2. **Generate Video** (\`GENERATE_VIDEO\`):
520
- * **Required Options:** \`-t GENERATE_VIDEO\`, \`-p <proj>\`, \`-c <chap>\`, \`-s <scene>\`, \`-v <videomodel>\`, \`-S <speed>\`, \`-i <imagemodel>\`, \`-o <orientation>\`
521
- * **Optional Option:** \`-E <endSceneId>\` (to connect/interpolate to the next frame directly).
522
- * **Allowed Models:** \`veo_3_1_fast\`, \`veo_3_1_fast_r2v\`
523
- * **Default Model (recommended):** \`veo_3_1_fast\`
524
- * **Allowed Speeds:** \`normal\`, \`timelapse\`, \`slowmotion\`
525
- * **Rule:** \`useFlowKey\` is locked natively to true. You must pass orientation and imageModel for video context.
526
- * \`veogent request -t "GENERATE_VIDEO" -p "projID" -c "chapID" -s "sceneA" -E "sceneB" -o "VERTICAL" -i "imagen3.5" -v "veo_3_1_fast" -S "normal"\`
527
-
528
- 3. **Video Upscale** (\`VIDEO_UPSCALE\`):
529
- * **Required Options:** \`-t VIDEO_UPSCALE\`, \`-p <proj>\`, \`-c <chap>\`, \`-s <scene>\`, \`-o <orientation>\`
530
- * **Allowed Orientations:** \`HORIZONTAL\`, \`VERTICAL\`
531
- * **Prohibited:** Do NOT pass \`-i\` (image model) or \`-v\` (video model).
532
- * \`veogent request -t "VIDEO_UPSCALE" -p "projID" -c "chapID" -s "sceneID" -o "HORIZONTAL"\`
533
- * **Shortcut command:** \`veogent upscale -p <proj> -c <chap> -s <scene> -o VERTICAL -r VIDEO_RESOLUTION_4K\`
534
-
535
- ## 🖌️ Character Editing
536
- Characters generated within a project can be updated or re-sketched via text prompts using \`veogent edit-character\`.
537
- * **List all Characters in a Project:**
538
- * \`veogent characters <projectId>\`
539
- * **Regenerate Character Profile:** (Updates description/traits and generates a new portrait base)
540
- * \`veogent edit-character -p <proj> -c "drelenavance" -u "change outfit to lab coat"\`
541
- * **Direct Image Edit Mode:** (Applies changes directly to the existing generated portrait)
542
- * \`veogent edit-character -p <proj> -c "drelenavance" -u "change shoe to black" -e\`
543
-
544
- ## 🖌️ Scene Editing
545
- If a generated image prompt needs adjustment by the AI, use \`veogent edit-scene\` to hit the \`updateScriptSegment\` workflow:
546
- * **Context:** Note that you are editing the Image Prompt for **Frame 0 (the starting image)** used for video generation.
547
- * **Prompting Guide:** Beside the main visual description, you CAN include minor action descriptions (e.g., "bus speeding over cliff", "smoke rising"). You SHOULD heavily leverage Camera Angles and Camera Movements to steer the frame composition:
548
- * **Shot Types:** Close-up (Cận cảnh), Wide shot (Toàn cảnh), Medium shot (Trung cảnh), Extreme close-up (Cận mặt), Long shot (Tầm trung xa).
549
- * **Angles:** High angle (Góc cao), Low angle (Góc thấp), Bird-eye (Góc chim), Eye-level (Góc ngang mắt), Over-the-shoulder, POV.
550
- * **Camera Tracking:** Pan left (←), Pan right (→), Tilt up (↑), Tilt down (↓), Zoom in (+), Zoom out (-).
551
- * **Modify Image Prompt (Default creates auto-regen):**
552
- * \`veogent edit-scene -p <proj> -c <chap> -s <scene> -u "Low angle shot of a yellow school bus speeding over a cliff, wide angle, dramatic lighting. Camera tilts down."\`
553
- * **Modify Image Prompt (Cancel Auto-Regen):**
554
- * \`veogent edit-scene -p <proj> -c <chap> -s <scene> -u "child seat behind Paulo" --no-regenerate\`
555
- * **Edit a specific past generated image:** Pass the previous generated \`requestId\` using \`-R\`.
556
- * \`veogent edit-scene -p <proj> -c <chap> -s <scene> -u "make the car red" -R <requestId>\`
557
-
558
- * **List All Generation Requests/Jobs Status:** \`veogent requests\`
559
- * This is the primary status board for generation workflows (image/video/character-edit related jobs). Always check this before retries.
560
-
561
- ## 💡 Best Practices for AI Agents (The VEOGENT Pipeline)
562
- 0. **Step 0: Resolve IDs first.** If not provided, fetch style IDs:
563
- - \`veogent custom-prompts\` (custom prompt ID)
564
- - \`veogent image-materials\` (material ID; \`CINEMATIC\` is an acceptable default)
565
- 1. **Step 1: Prepare story input.** Build story arc + summary + key notes before API calls.
566
- 2. **Step 2: Description First.** Run \`veogent create-project-description\` from the story input, then use that payload for \`veogent create-project\`.
567
- 3. **Step 3: Chapter & Scene Content.** Run \`veogent create-chapter-content -s <sceneCount>\` (each scene maps to ~8s clip), then IMMEDIATELY pass the returned scene-script array to \`veogent create-scene ... -C ... --flowkey\`.
568
- 4. **Step 4: Await Casting (CRITICAL).** The system auto-generates characters. Do NOT rush to image/video generation. Poll \`veogent characters <projectId>\` until EVERY character has an \`imageUri\`.
569
- *(Alternative check: \`veogent project <projectId>\` -> \`progress\` object. If a character is FAILED/PROCESSING/PENDING, wait and avoid spam retries.)*
570
- 5. **Step 5: Character recovery path.** If any character is missing \`imageUri\`, inspect \`veogent requests\` for failure/success, then regenerate with \`veogent edit-character\` where needed.
571
- 6. **Step 6: Generate Images (Critical QA Gate).** Request \`GENERATE_IMAGES\` per scene/orientation.
572
- *(Anti-Spam: Use \`veogent assets <projId> <chapId> <sceneId> <type>\`; if status is PENDING/PROCESSING, WAIT and do not duplicate requests.)*
573
- *(Concurrency: maximum 5 requests can be processed simultaneously. "maximum request limit reached" means queue-full; wait and retry later.)*
574
- 7. **Step 7: AI Review on image mismatch.** If generated image is reported as incorrect, decode/export the image to Base64 and send it to an AI reviewer agent for visual evaluation.
575
- - If review indicates mismatch: refine prompt via \`veogent edit-scene -u "..."\` and regenerate.
576
- - For direct correction on a specific generated image, pass prior \`requestId\` via \`veogent edit-scene -R <requestId>\`.
577
- 8. **Step 8: Art Directing & QA.** Continue visual QA loop until scene image is director-approved.
578
- 9. **Step 9: Animate.** Only run \`GENERATE_VIDEO\` after the scene already has a successful matching-orientation image.
579
- 10. **Step 10: YouTube Publishing Assets.** Finalize with \`veogent generate-yt-metadata\` + \`veogent generate-yt-thumbnail\`; retrieve via \`veogent yt-thumbnails <proj> <chap>\`.
580
-
581
- **Error Handling:** The CLI returns JSON like \`{"status": "error", "message": "..."}\`. Check this before proceeding with the next logic block. If an API request returns \`400 Bad Request\`, review your flags.`;
582
- console.log(skillContent);
583
- });
584
-
585
476
  program
586
477
  .command('obtain-flow')
587
478
  .description('Auto-extract your labs.google Flow Token (ya29.) using a secure browser overlay')
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veogent",
3
- "version": "1.0.15",
3
+ "version": "1.0.16",
4
4
  "description": "The official CLI to interact with the VEOGENT API - AI Video and Image generation platform",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -0,0 +1,585 @@
1
+ ---
2
+ name: veogent
3
+ description: Full CLI skill guide for the VEOGENT API — AI-powered movie/story project management, image & video generation, and YouTube publishing.
4
+ ---
5
+
6
+ # VEOGENT CLI — Agent Skill Guide
7
+
8
+ The `veogent` command-line interface interacts with the **VEOGENT API** for managing AI movie/story projects, chapters, scenes, characters, and media generation requests (images, videos, upscales). All data outputs are strict **JSON** — designed for AI agent parsing and chaining.
9
+
10
+ ---
11
+
12
+ ## Table of Contents
13
+
14
+ 1. [Authentication & Configuration](#-authentication--configuration)
15
+ 2. [Projects & Assets](#-projects--assets)
16
+ 3. [Chapters](#-chapters)
17
+ 4. [Scenes](#-scenes)
18
+ 5. [Characters](#-characters)
19
+ 6. [Scene Editing & Prompt Crafting](#-scene-editing--prompt-crafting)
20
+ 7. [Generation Requests (Images / Videos / Upscale)](#-generation-requests)
21
+ 8. [Monitoring & Status](#-monitoring--status)
22
+ 9. [YouTube Metadata & Thumbnails](#-youtube-metadata--thumbnails)
23
+ 10. [Flow Token Management](#-flow-token-management)
24
+ 11. [The Complete VEOGENT Pipeline (Best Practices)](#-the-complete-veogent-pipeline)
25
+ 12. [Error Handling](#-error-handling)
26
+
27
+ ---
28
+
29
+ ## 🔐 Authentication & Configuration
30
+
31
+ ### Skill: `login`
32
+ - **Description:** Login to obtain access token via Web Browser. Opens a local browser for **Google Firebase OAuth** — agents **cannot** authenticate automatically.
33
+ - **Guidelines:** If `veogent status` returns `{"error": "Not logged in"}`, instruct the user to run `veogent login` manually in their desktop terminal and wait for confirmation.
34
+ - **Example:**
35
+ ```bash
36
+ veogent login
37
+ ```
38
+
39
+ ### Skill: `logout`
40
+ - **Description:** Clear saved credentials and remove the stored access token.
41
+ - **Example:**
42
+ ```bash
43
+ veogent logout
44
+ ```
45
+
46
+ ### Skill: `status`
47
+ - **Description:** Show current authenticated user, Flow Key details, and payment tier.
48
+ - **Guidelines:** Always call this first to verify the agent has valid authentication before making API calls.
49
+ - **Example:**
50
+ ```bash
51
+ veogent status
52
+ # Output: { "authenticated": true, "flowKey": "ya29.xxx", "paymentTier": "PAYGATE_TIER_TWO" }
53
+ ```
54
+
55
+ ### Skill: `setup-flow`
56
+ - **Description:** Setup/update the Google Flow Key and User Payment Tier. Required for video generation and AI-assisted features.
57
+ - **Guidelines:**
58
+ - If any VEOGENT API request fails with a `"status code 401"` or Flow error, the Flow Key has expired.
59
+ - Prompt the user for a new key and update it via `setup-flow` before retrying.
60
+ - **Options:**
61
+ | Flag | Required | Description | Default |
62
+ |------|----------|-------------|---------|
63
+ | `-f, --flowkey <key>` | ✅ | The Google access token (ya29...) | — |
64
+ | `-t, --tier <tier>` | ❌ | User payment tier | `PAYGATE_TIER_TWO` |
65
+ - **Example:**
66
+ ```bash
67
+ veogent setup-flow -f "ya29.a0AW..." -t "PAYGATE_TIER_TWO"
68
+ ```
69
+
70
+ ### Skill: `obtain-flow`
71
+ - **Description:** Auto-extract your labs.google Flow Token (`ya29.`) using a secure Chromium browser overlay.
72
+ - **Guidelines:** This opens a Chromium window to `https://labs.google/fx/tools/flow` and captures the Bearer Token from network traffic. The user must click "Create with Flow" and login if requested.
73
+ - **Example:**
74
+ ```bash
75
+ veogent obtain-flow
76
+ # Output: 🎉 Extracted Flow Token: ya29.xxx
77
+ # Then apply it:
78
+ veogent setup-flow -f "ya29.xxx"
79
+ ```
80
+
81
+ ---
82
+
83
+ ## 📁 Projects & Assets
84
+
85
+ ### Skill: `image-materials`
86
+ - **Description:** Get all available Image Material styles (e.g., `CINEMATIC`, `PIXAR_3D`, `Anime style`).
87
+ - **Guidelines:** **Always call this before creating a project** to know which material strings are valid. `CINEMATIC` is an acceptable default if unsure.
88
+ - **Example:**
89
+ ```bash
90
+ veogent image-materials
91
+ ```
92
+
93
+ ### Skill: `custom-prompts`
94
+ - **Description:** Get all custom prompt templates / story directives.
95
+ - **Guidelines:** Call this to find a matching `customPromptId` if a custom stylistic prompt is needed when creating a project or generating descriptions.
96
+ - **Example:**
97
+ ```bash
98
+ veogent custom-prompts
99
+ ```
100
+
101
+ ### Skill: `projects`
102
+ - **Description:** List all your available projects.
103
+ - **Guidelines:**
104
+ - IDs are **Firebase Document Strings** (e.g., `APQF6Ay0kLeXLhpctTdD`), not simple integers.
105
+ - Always use the field `"id"` from the JSON response array.
106
+ - **Example:**
107
+ ```bash
108
+ veogent projects
109
+ ```
110
+
111
+ ### Skill: `project`
112
+ - **Description:** Get details for a specific project including its progress status, characters, and configuration.
113
+ - **Example:**
114
+ ```bash
115
+ veogent project <projectId>
116
+ veogent project APQF6Ay0kLeXLhpctTdD
117
+ ```
118
+
119
+ ### Skill: `create-project-description`
120
+ - **Description:** Generate an AI-powered description for a new project based on keywords. This should be called **before** `create-project` to build the story payload.
121
+ - **Options:**
122
+ | Flag | Required | Description |
123
+ |------|----------|-------------|
124
+ | `-k, --keyword <keyword>` | ✅ | Keywords for the project |
125
+ | `-l, --lang <lang>` | ✅ | Story language (e.g., `English`, `Vietnamese`) |
126
+ | `-p, --promptId <promptId>` | ✅ | Custom Prompt ID from `custom-prompts` |
127
+ - **Example:**
128
+ ```bash
129
+ veogent create-project-description -k "T-rex, Neon, Tokyo" -l "English" -p "promptId123"
130
+ ```
131
+
132
+ ### Skill: `create-project`
133
+ - **Description:** Create a new AI movie/story project with full configuration.
134
+ - **Options:**
135
+ | Flag | Required | Description | Default |
136
+ |------|----------|-------------|---------|
137
+ | `-n, --name <name>` | ✅ | Project name | — |
138
+ | `-k, --keyword <keyword>` | ✅ | Keywords | — |
139
+ | `-d, --desc <desc>` | ✅ | Description (use output from `create-project-description`) | — |
140
+ | `-l, --lang <lang>` | ✅ | Story language | — |
141
+ | `-s, --sound` | ✅ | Sound effects | `true` |
142
+ | `-m, --material <material>` | ✅ | Image material (from `image-materials`) | — |
143
+ | `-c, --chapters <count>` | ✅ | Number of chapters | `1` |
144
+ | `-C, --customPromptId <id>` | ❌ | Custom Prompt ID | — |
145
+ - **Example:**
146
+ ```bash
147
+ veogent create-project -n "Cyberpunk T-Rex" -k "T-rex, Neon, Sci-fi" \
148
+ -d "A massive T-rex walking inside Tokyo at night..." \
149
+ -l "English" -m "CINEMATIC" -c 5
150
+ ```
151
+
152
+ ---
153
+
154
+ ## 📖 Chapters
155
+
156
+ ### Skill: `chapters`
157
+ - **Description:** Get all chapters for a specific project.
158
+ - **Example:**
159
+ ```bash
160
+ veogent chapters <projectId>
161
+ ```
162
+
163
+ ### Skill: `recent-chapters`
164
+ - **Description:** Get recently created or updated chapters across all projects.
165
+ - **Options:**
166
+ | Flag | Required | Description | Default |
167
+ |------|----------|-------------|---------|
168
+ | `-l, --limit <limit>` | ❌ | Maximum number of recent chapters to return | `10` |
169
+ - **Example:**
170
+ ```bash
171
+ veogent recent-chapters -l 5
172
+ ```
173
+
174
+ ### Skill: `create-chapter-content`
175
+ - **Description:** Generate AI story/narrative content for a specific chapter, producing scene scripts.
176
+ - **Guidelines:** Each scene maps to approximately an **~8-second video clip**. The returned scene-script array should be **immediately** passed to `create-scene`.
177
+ - **Options:**
178
+ | Flag | Required | Description | Default |
179
+ |------|----------|-------------|---------|
180
+ | `-p, --project <project>` | ✅ | Project ID | — |
181
+ | `-c, --chapter <chapter>` | ✅ | Chapter ID | — |
182
+ | `-s, --scenes <count>` | ✅ | Number of scenes to generate | `1` |
183
+ - **Example:**
184
+ ```bash
185
+ veogent create-chapter-content -p "projID" -c "chapID" -s 5
186
+ ```
187
+
188
+ ---
189
+
190
+ ## 🎬 Scenes
191
+
192
+ ### Skill: `scenes`
193
+ - **Description:** Get all scenes for a specific chapter within a project.
194
+ - **Example:**
195
+ ```bash
196
+ veogent scenes <projectId> <chapterId>
197
+ ```
198
+
199
+ ### Skill: `create-scene`
200
+ - **Description:** Create new scenes from an array of text content/script lines.
201
+ - **Guidelines:** Pass the scene-script array returned from `create-chapter-content` directly. Use `--flowkey` to sync context via Firebase.
202
+ - **Options:**
203
+ | Flag | Required | Description | Default |
204
+ |------|----------|-------------|---------|
205
+ | `-p, --project <project>` | ✅ | Project ID | — |
206
+ | `-c, --chapter <chapter>` | ✅ | Chapter ID | — |
207
+ | `-C, --content <content...>` | ✅ | Array of scene text scripts | — |
208
+ | `--flowkey` | ❌ | Enable useFlowKey to sync context via Firebase | `false` |
209
+ - **Example:**
210
+ ```bash
211
+ veogent create-scene -p "projID" -c "chapID" \
212
+ -C "The T-Rex looks up at the sky." "A meteor shower begins." "Explosions rock the city." \
213
+ --flowkey
214
+ ```
215
+
216
+ ---
217
+
218
+ ## 🧑‍🎨 Characters
219
+
220
+ ### Skill: `characters`
221
+ - **Description:** Get all characters for a specific project, including their `imageUri` status.
222
+ - **Guidelines:** After creating scenes, the system **auto-generates characters**. Poll this command until every character has an `imageUri` before proceeding to image/video generation.
223
+ - **Example:**
224
+ ```bash
225
+ veogent characters <projectId>
226
+ ```
227
+
228
+ ### Skill: `edit-character`
229
+ - **Description:** Update a character's description/traits or edit their generated image directly via AI prompt.
230
+ - **Guidelines:**
231
+ - **Regenerate Profile Mode** (default): Updates description/traits and generates a new portrait base.
232
+ - **Direct Image Edit Mode** (`-e` flag): Applies changes directly to the existing generated portrait image via in-painting.
233
+ - **Options:**
234
+ | Flag | Required | Description | Default |
235
+ |------|----------|-------------|---------|
236
+ | `-p, --project <project>` | ✅ | Project ID | — |
237
+ | `-c, --character <character>` | ✅ | Character ID (e.g., `drelenavance`) | — |
238
+ | `-u, --userprompt <userprompt>` | ✅ | User instruction to modify the character | — |
239
+ | `-e, --editimage` | ❌ | Enable direct Image Editing Mode | `false` |
240
+ | `--flowkey` | ❌ | Enable useFlowKey to sync context via Firebase | `true` |
241
+ - **Examples:**
242
+ ```bash
243
+ # Regenerate character profile with new traits
244
+ veogent edit-character -p "projID" -c "drelenavance" -u "change outfit to lab coat"
245
+
246
+ # Direct image edit (in-paint on existing portrait)
247
+ veogent edit-character -p "projID" -c "drelenavance" -u "change shoes to black boots" -e
248
+ ```
249
+
250
+ ---
251
+
252
+ ## 🖌️ Scene Editing & Prompt Crafting
253
+
254
+ ### Skill: `edit-scene`
255
+ - **Description:** Edit an existing scene's image prompt via AI assistance, hitting the `updateScriptSegment` workflow.
256
+ - **Guidelines:**
257
+ - You are editing the **Image Prompt for Frame 0** (the starting image) used for video generation.
258
+ - By default, editing a scene auto-regenerates the image. Use `--no-regenerate` to skip.
259
+ - To edit a specific past generated image, pass the previous `requestId` using `-R`.
260
+
261
+ #### 📐 Prompting Guide for Scene Image Prompts
262
+
263
+ Beside the main visual description, you **CAN** include minor action descriptions (e.g., "bus speeding over cliff", "smoke rising"). You **SHOULD** heavily leverage camera terminology to steer frame composition:
264
+
265
+ **Shot Types:**
266
+ | Shot Type | Description | Vietnamese |
267
+ |-----------|-------------|------------|
268
+ | Close-up | Tight framing on subject | Cận cảnh |
269
+ | Wide shot | Full environment visible | Toàn cảnh |
270
+ | Medium shot | Waist-up framing | Trung cảnh |
271
+ | Extreme close-up | Detail-level (face, object) | Cận mặt |
272
+ | Long shot | Subject small in frame | Tầm trung xa |
273
+
274
+ **Camera Angles:**
275
+ | Angle | Description |
276
+ |-------|-------------|
277
+ | High angle | Looking down on subject (Góc cao) |
278
+ | Low angle | Looking up at subject (Góc thấp) |
279
+ | Bird's-eye | Directly overhead (Góc chim) |
280
+ | Eye-level | Neutral perspective (Góc ngang mắt) |
281
+ | Over-the-shoulder | Behind a character looking forward |
282
+ | POV | First-person perspective |
283
+
284
+ **Camera Movements:**
285
+ | Movement | Symbol | Description |
286
+ |----------|--------|-------------|
287
+ | Pan left | ← | Horizontal sweep left |
288
+ | Pan right | → | Horizontal sweep right |
289
+ | Tilt up | ↑ | Vertical sweep up |
290
+ | Tilt down | ↓ | Vertical sweep down |
291
+ | Zoom in | + | Push closer |
292
+ | Zoom out | - | Pull farther |
293
+
294
+ - **Options:**
295
+ | Flag | Required | Description |
296
+ |------|----------|-------------|
297
+ | `-p, --project <project>` | ✅ | Project ID |
298
+ | `-c, --chapter <chapter>` | ✅ | Chapter ID |
299
+ | `-s, --scene <scene>` | ✅ | Scene ID |
300
+ | `-u, --userprompt <userprompt>` | ✅ | User narrative prompt to modify the scene |
301
+ | `--no-regenerate` | ❌ | Skip auto-regeneration of image |
302
+ | `-R, --request <request>` | ❌ | Target a specific past Request ID to edit its output |
303
+
304
+ - **Examples:**
305
+ ```bash
306
+ # Modify image prompt (auto-regenerates)
307
+ veogent edit-scene -p "projID" -c "chapID" -s "sceneID" \
308
+ -u "Low angle shot of a yellow school bus speeding over a cliff, wide angle, dramatic lighting. Camera tilts down."
309
+
310
+ # Modify image prompt WITHOUT auto-regeneration
311
+ veogent edit-scene -p "projID" -c "chapID" -s "sceneID" \
312
+ -u "child seat behind Paulo" --no-regenerate
313
+
314
+ # Edit a specific past generated image directly
315
+ veogent edit-scene -p "projID" -c "chapID" -s "sceneID" \
316
+ -u "make the car red" -R "requestId123"
317
+ ```
318
+
319
+ ---
320
+
321
+ ## 🎬 Generation Requests
322
+
323
+ ### Skill: `request`
324
+ - **Description:** Create a generation job request. Supports `GENERATE_IMAGES`, `GENERATE_VIDEO`, and `VIDEO_UPSCALE`.
325
+ - **Guidelines:**
326
+ > ⚠️ **CRITICAL VALIDATION RULES (Strict DTO):** Do not pass unsupported flags for a specific type, or the server will return a `400 Bad Request` or `Validation Error`.
327
+
328
+ #### 1. Generate Images (`GENERATE_IMAGES`)
329
+
330
+ | Flag | Required | Description | Allowed Values |
331
+ |------|----------|-------------|----------------|
332
+ | `-t, --type` | ✅ | `GENERATE_IMAGES` | — |
333
+ | `-p, --project` | ✅ | Project ID | — |
334
+ | `-c, --chapter` | ✅ | Chapter ID | — |
335
+ | `-s, --scene` | ✅ | Scene ID | — |
336
+ | `-i, --imagemodel` | ✅ | Image model | `imagen4`, `imagen3.5` |
337
+
338
+ > 🚫 **Prohibited flags:** Do NOT pass `-o` (orientation), `-v` (videomodel), or `-S` (speed).
339
+
340
+ ```bash
341
+ veogent request -t "GENERATE_IMAGES" -p "projID" -c "chapID" -s "sceneID" -i "imagen4"
342
+ ```
343
+
344
+ #### 2. Generate Video (`GENERATE_VIDEO`)
345
+
346
+ | Flag | Required | Description | Allowed Values |
347
+ |------|----------|-------------|----------------|
348
+ | `-t, --type` | ✅ | `GENERATE_VIDEO` | — |
349
+ | `-p, --project` | ✅ | Project ID | — |
350
+ | `-c, --chapter` | ✅ | Chapter ID | — |
351
+ | `-s, --scene` | ✅ | Scene ID | — |
352
+ | `-v, --videomodel` | ✅ | Video model | `veo_3_1_fast` (recommended), `veo_3_1_fast_r2v` |
353
+ | `-S, --speed` | ✅ | Video speed | `normal`, `timelapse`, `slowmotion` |
354
+ | `-i, --imagemodel` | ✅ | Image model for video context | `imagen4`, `imagen3.5` |
355
+ | `-o, --orientation` | ✅ | Orientation | `HORIZONTAL`, `VERTICAL` |
356
+ | `-E, --endscene` | ❌ | End Scene ID for continuous video generation (interpolation to next frame) | — |
357
+
358
+ > ℹ️ `useFlowKey` is **locked natively to `true`** — you must have a valid Flow Key.
359
+ > ℹ️ Only run `GENERATE_VIDEO` **after** the scene already has a successful matching-orientation image.
360
+
361
+ ```bash
362
+ veogent request -t "GENERATE_VIDEO" -p "projID" -c "chapID" -s "sceneA" \
363
+ -E "sceneB" -o "VERTICAL" -i "imagen3.5" -v "veo_3_1_fast" -S "normal"
364
+ ```
365
+
366
+ #### 3. Video Upscale (`VIDEO_UPSCALE`)
367
+
368
+ | Flag | Required | Description | Allowed Values |
369
+ |------|----------|-------------|----------------|
370
+ | `-t, --type` | ✅ | `VIDEO_UPSCALE` | — |
371
+ | `-p, --project` | ✅ | Project ID | — |
372
+ | `-c, --chapter` | ✅ | Chapter ID | — |
373
+ | `-s, --scene` | ✅ | Scene ID | — |
374
+ | `-o, --orientation` | ✅ | Orientation | `HORIZONTAL`, `VERTICAL` |
375
+
376
+ > 🚫 **Prohibited flags:** Do NOT pass `-i` (image model) or `-v` (video model).
377
+
378
+ ```bash
379
+ veogent request -t "VIDEO_UPSCALE" -p "projID" -c "chapID" -s "sceneID" -o "HORIZONTAL"
380
+ ```
381
+
382
+ ### Skill: `upscale` (Shortcut)
383
+ - **Description:** Shortcut command for upscaling video output for a specific scene.
384
+ - **Options:**
385
+ | Flag | Required | Description | Default |
386
+ |------|----------|-------------|---------|
387
+ | `-p, --project` | ✅ | Project ID | — |
388
+ | `-c, --chapter` | ✅ | Chapter ID | — |
389
+ | `-s, --scene` | ✅ | Scene ID | — |
390
+ | `-o, --orientation` | ❌ | Orientation | `VERTICAL` |
391
+ | `-r, --resolution` | ❌ | Target resolution | `VIDEO_RESOLUTION_4K` |
392
+ - **Example:**
393
+ ```bash
394
+ veogent upscale -p "projID" -c "chapID" -s "sceneID" -o VERTICAL -r VIDEO_RESOLUTION_4K
395
+ ```
396
+
397
+ ---
398
+
399
+ ## 📊 Monitoring & Status
400
+
401
+ ### Skill: `requests`
402
+ - **Description:** Get all generation requests/jobs status for the current user. This is the **primary status board** for all generation workflows (image/video/character-edit).
403
+ - **Guidelines:** Always check this before retrying any generation. Look for `PENDING`, `PROCESSING`, `SUCCESS`, or `FAILED` statuses.
404
+ - **Example:**
405
+ ```bash
406
+ veogent requests
407
+ ```
408
+
409
+ ### Skill: `assets`
410
+ - **Description:** Check generated assets history/status for a specific scene.
411
+ - **Guidelines:**
412
+ - **Anti-Spam Rule:** If status is `PENDING` or `PROCESSING`, **WAIT** and do not duplicate requests.
413
+ - **Concurrency:** Maximum **5 requests** can be processed simultaneously. `"maximum request limit reached"` means the queue is full — wait and retry later.
414
+ - **Example:**
415
+ ```bash
416
+ # Types: GENERATE_IMAGES, GENERATE_VIDEO, EDIT_IMAGE
417
+ veogent assets <projectId> <chapterId> <sceneId> GENERATE_IMAGES
418
+ veogent assets <projectId> <chapterId> <sceneId> GENERATE_VIDEO
419
+ ```
420
+
421
+ ---
422
+
423
+ ## 📺 YouTube Metadata & Thumbnails
424
+
425
+ ### Skill: `generate-yt-metadata`
426
+ - **Description:** Generate YouTube metadata (Title, Description, Tags) for a chapter using AI.
427
+ - **Options:**
428
+ | Flag | Required | Description |
429
+ |------|----------|-------------|
430
+ | `-p, --project` | ✅ | Project ID |
431
+ | `-c, --chapter` | ✅ | Chapter ID |
432
+ | `-l, --lang` | ✅ | Story language |
433
+ - **Example:**
434
+ ```bash
435
+ veogent generate-yt-metadata -p "projID" -c "chapID" -l "English"
436
+ ```
437
+
438
+ ### Skill: `generate-yt-thumbnail`
439
+ - **Description:** Triggers a request to generate a YouTube thumbnail for a chapter.
440
+ - **Options:**
441
+ | Flag | Required | Description |
442
+ |------|----------|-------------|
443
+ | `-p, --project` | ✅ | Project ID |
444
+ | `-c, --chapter` | ✅ | Chapter ID |
445
+ | `-l, --lang` | ✅ | Story language |
446
+ - **Example:**
447
+ ```bash
448
+ veogent generate-yt-thumbnail -p "projID" -c "chapID" -l "English"
449
+ ```
450
+
451
+ ### Skill: `yt-thumbnails`
452
+ - **Description:** Retrieve generated YouTube thumbnails for a chapter.
453
+ - **Example:**
454
+ ```bash
455
+ veogent yt-thumbnails <projectId> <chapterId>
456
+ ```
457
+
458
+ ---
459
+
460
+ ## 🗝️ Flow Token Management
461
+
462
+ ### Skill: `obtain-flow`
463
+ - **Description:** Auto-extract the Google Flow Token (`ya29.`) by opening a secure Chromium browser overlay to `https://labs.google/fx/tools/flow`.
464
+ - **Guidelines:**
465
+ 1. This opens a Chromium window automatically.
466
+ 2. The user must click **"Create with Flow"** and login if requested.
467
+ 3. The tool captures the underlying Bearer Token from network traffic.
468
+ 4. After extraction, apply the token with `veogent setup-flow -f "<token>"`.
469
+ - **Example:**
470
+ ```bash
471
+ veogent obtain-flow
472
+ # Then:
473
+ veogent setup-flow -f "ya29.a0AW..."
474
+ ```
475
+
476
+ ---
477
+
478
+ ## 💡 The Complete VEOGENT Pipeline
479
+
480
+ Follow this 11-step production pipeline for end-to-end AI movie generation:
481
+
482
+ ### Step 0: Resolve IDs
483
+ If not provided by the user, fetch style/template IDs first:
484
+ ```bash
485
+ veogent custom-prompts # → get customPromptId
486
+ veogent image-materials # → get material ID (default: CINEMATIC)
487
+ ```
488
+
489
+ ### Step 1: Prepare Story Input
490
+ Build your story arc, summary, and key notes **before** making API calls. This is the creative foundation.
491
+
492
+ ### Step 2: Description First
493
+ Generate an AI description from story input, then use that payload for project creation:
494
+ ```bash
495
+ veogent create-project-description -k "keywords" -l "English" -p "promptId"
496
+ # Use the returned description in create-project
497
+ ```
498
+
499
+ ### Step 3: Create Project
500
+ ```bash
501
+ veogent create-project -n "Name" -k "keywords" -d "AI-generated description" -l "English" -m "CINEMATIC" -c 5
502
+ ```
503
+
504
+ ### Step 4: Chapter & Scene Content
505
+ Generate chapter narrative content, then **immediately** pass the returned scene-script array to `create-scene`:
506
+ ```bash
507
+ veogent create-chapter-content -p <projId> -c <chapId> -s 5
508
+ # Each scene ≈ 8-second clip
509
+
510
+ veogent create-scene -p <projId> -c <chapId> -C "script 1" "script 2" "script 3" --flowkey
511
+ ```
512
+
513
+ ### Step 5: Await Character Casting (⚠️ CRITICAL)
514
+ The system **auto-generates characters**. Do NOT rush to image/video generation.
515
+ ```bash
516
+ # Poll until EVERY character has an imageUri
517
+ veogent characters <projectId>
518
+
519
+ # Alternative: check project progress object
520
+ veogent project <projectId>
521
+ # Look at: progress → if FAILED/PROCESSING/PENDING, wait. Avoid spam retries.
522
+ ```
523
+
524
+ ### Step 6: Character Recovery Path
525
+ If any character is missing `imageUri`:
526
+ ```bash
527
+ veogent requests # inspect for failure/success
528
+ veogent edit-character -p <proj> -c "<charId>" -u "regenerate portrait"
529
+ ```
530
+
531
+ ### Step 7: Generate Images (Critical QA Gate)
532
+ Request `GENERATE_IMAGES` per scene:
533
+ ```bash
534
+ veogent request -t "GENERATE_IMAGES" -p <proj> -c <chap> -s <scene> -i "imagen4"
535
+
536
+ # Anti-Spam: check status first!
537
+ veogent assets <proj> <chap> <scene> GENERATE_IMAGES
538
+ # If PENDING/PROCESSING → WAIT, do NOT duplicate requests
539
+ # Concurrency limit: max 5 simultaneous requests
540
+ ```
541
+
542
+ ### Step 8: AI Review on Image Mismatch
543
+ If a generated image is reported as incorrect:
544
+ 1. Decode/export the image to Base64 and send to an AI reviewer agent for visual evaluation.
545
+ 2. If mismatch confirmed → refine prompt:
546
+ ```bash
547
+ veogent edit-scene -p <proj> -c <chap> -s <scene> -u "refined prompt..."
548
+ ```
549
+ 3. For direct correction on a specific generated image:
550
+ ```bash
551
+ veogent edit-scene -p <proj> -c <chap> -s <scene> -u "make the car red" -R <requestId>
552
+ ```
553
+
554
+ ### Step 9: Art Directing & QA
555
+ Continue the visual QA loop until the scene image is **director-approved**. Iterate between `edit-scene` and `GENERATE_IMAGES` as needed.
556
+
557
+ ### Step 10: Animate
558
+ Only run `GENERATE_VIDEO` **after** the scene already has a successful matching-orientation image:
559
+ ```bash
560
+ veogent request -t "GENERATE_VIDEO" -p <proj> -c <chap> -s <scene> \
561
+ -v "veo_3_1_fast" -S "normal" -i "imagen4" -o "HORIZONTAL"
562
+ ```
563
+
564
+ ### Step 11: YouTube Publishing Assets
565
+ Finalize with metadata and thumbnails:
566
+ ```bash
567
+ veogent generate-yt-metadata -p <proj> -c <chap> -l "English"
568
+ veogent generate-yt-thumbnail -p <proj> -c <chap> -l "English"
569
+ veogent yt-thumbnails <proj> <chap>
570
+ ```
571
+
572
+ ---
573
+
574
+ ## ⚠️ Error Handling
575
+
576
+ The CLI returns JSON for all responses:
577
+
578
+ | Pattern | Meaning | Action |
579
+ |---------|---------|--------|
580
+ | `{"status": "success", ...}` | Operation completed | Proceed to next step |
581
+ | `{"status": "error", "message": "..."}` | Operation failed | Read the message, fix inputs, retry |
582
+ | `{"error": "Not logged in"}` | No valid auth token | Have user run `veogent login` |
583
+ | `400 Bad Request` | Invalid flags/payload for DTO | Review your flags — likely passing prohibited options for the request type |
584
+ | `401` / Flow error | Flow Key expired | Get new key via `veogent obtain-flow` or user, then `veogent setup-flow` |
585
+ | `"maximum request limit reached"` | Queue full (5 max concurrent) | Wait and retry later — not a hard failure |