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 +15 -15
- package/index.js +28 -21
- package/package.json +1 -1
- package/skills/SKILL.md +11 -9
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
Core chapter story text → Project + Characters (reference images)
|
|
49
|
+
→ Chapter Content (storyboard)
|
|
50
|
+
→ Scenes → Images → Videos
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
-
**Key concept:**
|
|
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
|
-
**
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
|
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
|
|
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
|
|
206
|
+
.description('Create a new project from chapter-structured core story text')
|
|
207
207
|
.requiredOption('--name <name>', 'Project name')
|
|
208
|
-
.requiredOption('--
|
|
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
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
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(
|
|
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:
|
|
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:
|
|
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:
|
|
260
|
+
console.log(JSON.stringify({ status: 'success', story, project: unwrapData(data) }, null, 2));
|
|
254
261
|
} catch (error) {
|
|
255
|
-
console.log(JSON.stringify({ status:
|
|
262
|
+
console.log(JSON.stringify({ status: 'error', ...formatCliError(error) }));
|
|
256
263
|
}
|
|
257
264
|
});
|
|
258
265
|
|
package/package.json
CHANGED
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
|
-
--
|
|
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 `--
|
|
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
|
-
--
|
|
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
|
|
37
|
+
Internally: CLI sends `--story` directly to `/app/project` (no `/app/description` pre-step).
|
|
38
38
|
|
|
39
|
-
**--
|
|
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"` →
|
|
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 `--
|
|
154
|
-
- `add-character` only for
|
|
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
|
|
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` |
|