veogent 1.4.0 → 1.5.0

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
@@ -45,12 +45,12 @@ veogent setup-flow --flowkey "ya29.a0AW..." --tier "PAYGATE_TIER_TWO" # Setup
45
45
  ### How VEOGENT Works — The Mental Model
46
46
 
47
47
  ```
48
- --idea AI Description → Project + Characters (reference images)
49
- → Chapter Content (storyboard)
50
- → Scenes → Images → Videos
48
+ Core chapter story text → Project + Characters (reference images)
49
+ → Chapter Content (storyboard)
50
+ → Scenes → Images → Videos
51
51
  ```
52
52
 
53
- **Key concept:** Names in `--idea` become character/entity references with image URIs at project level. These references ensure visual consistency across ALL chapters and scenes.
53
+ **Key concept:** Pass rich story text directly to `create-project` (chapter-structured). VEOGENT uses named entities from that story to build project-level references for consistency.
54
54
 
55
55
  ### The Pipeline (4 Phases)
56
56
 
@@ -58,21 +58,21 @@ veogent setup-flow --flowkey "ya29.a0AW..." --tier "PAYGATE_TIER_TWO" # Setup
58
58
 
59
59
  ```bash
60
60
  veogent create-project \
61
- --idea "Bella the white Bichon Frisé CEO in pink blazer, two Doberman bodyguards Rex and Duke in black suits, luxury shopping mall Saigon" \
62
61
  --name "Boss Babe in Fur" \
62
+ --story "Chapter 1.
63
+ Bella the white Bichon Frisé CEO in a pink blazer enters the luxury Saigon mall with two Doberman bodyguards Rex and Duke. She shops designer stores, faces a tense crowd moment, then exits with golden bags under neon lights." \
63
64
  --lang English \
64
65
  --material CINEMATIC
65
66
  ```
66
67
 
67
- **What happens internally:**
68
- 1. CLI calls `/app/description` with --idea VEOGENT AI generates rich story description
69
- 2. CLI calls `/app/project` with rich description creates project + auto-generates characters from names in --idea
68
+ **Story format rules:**
69
+ - If `--chapters` is omitted, default is `1`
70
+ - Must include headings like `Chapter 1.` (and `Chapter 2.` ... when chapters > 1)
71
+ - Keep each chapter as core plot text (VEOGENT will expand into scenes later)
70
72
 
71
- **--idea rules:**
72
- - Include specific names: characters, locations, props, creatures
73
- - Include visual traits: "white Bichon Frisé", "black suits", "luxury mall"
74
- - ❌ Don't be vague: "cute dog shopping" → VEOGENT will invent random characters
75
- - Names in --idea → appear in storyboard → VEOGENT creates reference images → consistent across N chapters
73
+ **What happens internally:**
74
+ 1. CLI sends your `--story` directly to `/app/project` (no `/app/description` call)
75
+ 2. VEOGENT creates project + chapter shell, then `create-chapter-content` expands story into scene scripts
76
76
 
77
77
  #### Phase 2: Generate Storyboard + Scenes
78
78
 
@@ -163,7 +163,7 @@ veogent request --type GENERATE_VIDEO \
163
163
  |---------|-------------|
164
164
  | `projects` | List all projects |
165
165
  | `project <id>` | Get project details |
166
- | `create-project` | Create project (auto-generates description from `--idea`) |
166
+ | `create-project` | Create project from chapter-structured `--story` text |
167
167
 
168
168
  ### Chapters & Scenes
169
169
 
@@ -257,7 +257,7 @@ Maximum **5** concurrent requests. If queue is full (E10071), CLI auto-retries o
257
257
 
258
258
  - Always use `--agent-safe` flag
259
259
  - Use `workflow-status` for the most complete snapshot
260
- - Character reference images are created from names found in `--idea` and scene scripts
260
+ - Character reference images are created from named entities in `--story` and generated scene scripts
261
261
  - Use character NAMES only in prompts — never describe appearance (reference images define it)
262
262
  - See **[`skills/SKILL.md`](./skills/SKILL.md)** for the full agent guide
263
263
 
package/index.js CHANGED
@@ -203,56 +203,63 @@ program
203
203
 
204
204
  program
205
205
  .command('create-project')
206
- .description('Create a new project (auto-generates rich description from idea)')
206
+ .description('Create a new project from chapter-structured core story text')
207
207
  .requiredOption('--name <name>', 'Project name')
208
- .requiredOption('--idea <idea>', 'Story idea')
209
- .option('--desc <desc>', 'Description (if omitted, auto-generated from idea via AI)')
208
+ .requiredOption('--story <story>', 'Core story text. Format: "Chapter 1. ..." (and "Chapter N." blocks when --chapters > 1)')
210
209
  .requiredOption('--lang <lang>', 'Story language')
211
210
  .option('--sound <sound>', 'Sound effects (true/false)', 'true')
212
211
  .requiredOption('--material <material>', 'Image material')
213
- .option('--chapters <count>', 'Number of chapters', '1')
212
+ .option('--chapters <count>', 'Number of chapters (default: 1)', '1')
214
213
  .option('--customPromptId <customPromptId>', 'Custom Prompt ID')
215
214
  .option('--objects <objects...>', 'List of specific objects for the project as JSON strings (optional)')
216
215
  .action(async (options) => {
217
216
  try {
218
- // Step 1: Generate rich description from keyword if not provided
219
- let description = options.desc;
220
- if (!description) {
221
- humanLog('📝 Generating description from idea...');
222
- const descData = unwrapData(await api.post('/app/description', {
223
- keyword: options.idea,
224
- language: options.lang,
225
- }));
226
- description = descData?.description || descData?.text || String(descData);
227
- humanLog(`✅ Description generated (${description.length} chars)`);
217
+ const chapterCount = Number.parseInt(options.chapters, 10);
218
+ if (!Number.isFinite(chapterCount) || chapterCount < 1) {
219
+ throw new Error('--chapters must be an integer >= 1');
220
+ }
221
+
222
+ const story = String(options.story || '').trim();
223
+ if (!story) {
224
+ throw new Error('--story is required');
225
+ }
226
+
227
+ const chapterMatches = story.match(/Chapter\s+\d+\./gi) || [];
228
+ if (chapterMatches.length < chapterCount) {
229
+ throw new Error(`Story format invalid: expected at least ${chapterCount} chapter heading(s) like "Chapter N."`);
230
+ }
231
+ for (let i = 1; i <= chapterCount; i += 1) {
232
+ const hasHeading = new RegExp(`\\bChapter\\s+${i}\\.`, 'i').test(story);
233
+ if (!hasHeading) {
234
+ throw new Error(`Story format invalid: missing heading "Chapter ${i}."`);
235
+ }
228
236
  }
229
237
 
230
- // Step 2: Create project with rich description
231
238
  let parsedObjects = [];
232
239
  if (options.objects && options.objects.length > 0) {
233
240
  try {
234
241
  parsedObjects = options.objects.map(objStr => typeof objStr === 'string' ? JSON.parse(objStr) : objStr);
235
242
  } catch (e) {
236
- throw new Error("Invalid JSON format for --objects.");
243
+ throw new Error('Invalid JSON format for --objects.');
237
244
  }
238
245
  }
239
246
 
240
247
  const payload = {
241
248
  projectName: options.name,
242
- keyword: options.idea,
243
- description,
249
+ keyword: story,
250
+ description: story,
244
251
  storyLanguage: options.lang,
245
252
  soundEffects: options.sound === 'true' || options.sound === true,
246
253
  imageMaterial: options.material,
247
- numberChapters: parseInt(options.chapters),
254
+ numberChapters: chapterCount,
248
255
  objects: parsedObjects
249
256
  };
250
257
  if (options.customPromptId) payload.customPromptId = options.customPromptId;
251
258
 
252
259
  const data = await api.post('/app/project', payload);
253
- console.log(JSON.stringify({ status: "success", description, project: unwrapData(data) }, null, 2));
260
+ console.log(JSON.stringify({ status: 'success', story, project: unwrapData(data) }, null, 2));
254
261
  } catch (error) {
255
- console.log(JSON.stringify({ status: "error", ...formatCliError(error) }));
262
+ console.log(JSON.stringify({ status: 'error', ...formatCliError(error) }));
256
263
  }
257
264
  });
258
265
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veogent",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
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": {
package/skills/SKILL.md CHANGED
@@ -12,12 +12,12 @@ Use the `veogent` CLI as the source of truth for VEOGENT workflows. Always use `
12
12
  ## How VEOGENT Works — The Mental Model
13
13
 
14
14
  ```
15
- --idea AI Description → Project + Character References (image URIs)
15
+ --story (chapter-structured plain text) → Project + Character References (image URIs)
16
16
  → Storyboard (scene scripts)
17
17
  → Scenes → Images → Videos
18
18
  ```
19
19
 
20
- **The key insight:** Names in `--idea` become character/entity references with image URIs at **project level**. These references ensure visual consistency across ALL chapters and scenes.
20
+ **The key insight:** Names/entities in `--story` become character/entity references with image URIs at **project level**. These references ensure visual consistency across ALL chapters and scenes.
21
21
 
22
22
  That's why you use character **NAMES only** in prompts — never describe appearance. The reference images already define exactly how each character looks.
23
23
 
@@ -29,19 +29,21 @@ That's why you use character **NAMES only** in prompts — never describe appear
29
29
 
30
30
  ```bash
31
31
  veogent create-project \
32
- --idea "Bella the white Bichon Frisé CEO in pink blazer, two Doberman bodyguards Rex and Duke in black suits, luxury shopping mall Saigon" \
32
+ --story "Chapter 1. Bella the white Bichon Frisé CEO in pink blazer enters a luxury shopping mall in Saigon with two Doberman bodyguards, Rex and Duke." \
33
33
  --name "Boss Babe in Fur" \
34
34
  --lang English --material CINEMATIC
35
35
  ```
36
36
 
37
- Internally: CLI calls `/app/description` generates rich AI description from --idea → creates project with character references.
37
+ Internally: CLI sends `--story` directly to `/app/project` (no `/app/description` pre-step).
38
38
 
39
- **--idea rules:**
39
+ **--story rules:**
40
40
  - ✅ Specific character names + species/role: `"Mochi the Shiba Inu"`, `"Chef Gordon the Bulldog"`
41
41
  - ✅ Location names: `"Grand Luxury Mall Saigon"`, `"Tokyo Night Market"`
42
42
  - ✅ Visual traits: `"pink blazer"`, `"black tactical suit"`
43
43
  - ✅ Props/creatures: `"robot vacuum"`, `"durian toy"`, `"golden shopping bags"`
44
- - ❌ Vague: `"cute dog shopping"` → VEOGENT invents random characters
44
+ - ❌ Vague one-liners: `"cute dog shopping"` → weak entity extraction and unstable references
45
+ - ✅ Include headings like `Chapter 1.` (`Chapter 2.`... when chapters > 1)
46
+ - ✅ If `--chapters` is omitted, default is `1`
45
47
 
46
48
  ### Phase 2: Storyboard + Scenes
47
49
 
@@ -150,8 +152,8 @@ veogent characters <projectId>
150
152
  ```
151
153
 
152
154
  **Rules:**
153
- - Characters from `--idea` are auto-created (no manual add needed)
154
- - `add-character` only for characters NOT in original --idea
155
+ - Characters/entities from `--story` are auto-created (no manual add needed)
156
+ - `add-character` only for entities NOT present in original `--story`
155
157
  - ⚠️ NEVER edit-character mid-project when scenes already generated
156
158
  - More references = better consistency (locations, props, troops too)
157
159
  - Mention a reference name in edit-scene → that entity appears in the scene
@@ -322,7 +324,7 @@ veogent request --type GENERATE_VIDEO --project X --chapter Y --scene Z \
322
324
 
323
325
  | Command | Description | Key Options |
324
326
  |---------|-------------|-------------|
325
- | `create-project` | Create project (auto-gen description from --idea) | `--idea`, `--name`, `--lang`, `--material`, `--chapters` |
327
+ | `create-project` | Create project from chapter-structured story text | `--story`, `--name`, `--lang`, `--material`, `--chapters` |
326
328
  | `projects` | List all projects | — |
327
329
  | `project <id>` | Get project details | — |
328
330
  | `delete-project` | ⚠️ Delete project permanently | `--project`, `--confirm` |