google-veo3-1-mcp-server 1.0.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 +257 -0
- package/dist/cli/batch.d.ts +8 -0
- package/dist/cli/batch.d.ts.map +1 -0
- package/dist/cli/batch.js +289 -0
- package/dist/cli/batch.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +372 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/extend.d.ts +14 -0
- package/dist/tools/extend.d.ts.map +1 -0
- package/dist/tools/extend.js +153 -0
- package/dist/tools/extend.js.map +1 -0
- package/dist/tools/generate.d.ts +10 -0
- package/dist/tools/generate.d.ts.map +1 -0
- package/dist/tools/generate.js +210 -0
- package/dist/tools/generate.js.map +1 -0
- package/dist/tools/interpolate.d.ts +12 -0
- package/dist/tools/interpolate.d.ts.map +1 -0
- package/dist/tools/interpolate.js +170 -0
- package/dist/tools/interpolate.js.map +1 -0
- package/dist/types/batch.d.ts +121 -0
- package/dist/types/batch.d.ts.map +1 -0
- package/dist/types/batch.js +37 -0
- package/dist/types/batch.js.map +1 -0
- package/dist/types/tools.d.ts +154 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +134 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/utils/batch-config.d.ts +26 -0
- package/dist/utils/batch-config.d.ts.map +1 -0
- package/dist/utils/batch-config.js +283 -0
- package/dist/utils/batch-config.js.map +1 -0
- package/dist/utils/batch-manager.d.ts +43 -0
- package/dist/utils/batch-manager.d.ts.map +1 -0
- package/dist/utils/batch-manager.js +310 -0
- package/dist/utils/batch-manager.js.map +1 -0
- package/dist/utils/debug.d.ts +16 -0
- package/dist/utils/debug.d.ts.map +1 -0
- package/dist/utils/debug.js +44 -0
- package/dist/utils/debug.js.map +1 -0
- package/dist/utils/path.d.ts +36 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +97 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/video.d.ts +44 -0
- package/dist/utils/video.d.ts.map +1 -0
- package/dist/utils/video.js +261 -0
- package/dist/utils/video.js.map +1 -0
- package/docs/GOOGLE_VEO_3.1_API_SPECIFICATION.md +392 -0
- package/examples/batch-config.json +44 -0
- package/package.json +48 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Veo 3.1 API Type Definitions
|
|
3
|
+
*/
|
|
4
|
+
export declare const MODELS: readonly ["veo-3.1-generate-preview", "veo-3.1-fast-generate-preview"];
|
|
5
|
+
export type Model = typeof MODELS[number];
|
|
6
|
+
export declare const DEFAULT_MODEL: Model;
|
|
7
|
+
export declare const RESOLUTIONS: readonly ["720p", "1080p", "4k"];
|
|
8
|
+
export type Resolution = typeof RESOLUTIONS[number];
|
|
9
|
+
export declare const DEFAULT_RESOLUTION: Resolution;
|
|
10
|
+
export declare const ASPECT_RATIOS: readonly ["16:9", "9:16"];
|
|
11
|
+
export type AspectRatio = typeof ASPECT_RATIOS[number];
|
|
12
|
+
export declare const DEFAULT_ASPECT_RATIO: AspectRatio;
|
|
13
|
+
export declare const DURATIONS: readonly [4, 6, 8];
|
|
14
|
+
export type Duration = typeof DURATIONS[number];
|
|
15
|
+
export declare const DEFAULT_DURATION: Duration;
|
|
16
|
+
export declare const EXTENSION_DURATION = 7;
|
|
17
|
+
export declare const EXTENSION_RESOLUTION: Resolution;
|
|
18
|
+
export declare const PERSON_GENERATION_OPTIONS: readonly ["allow_adult", "dont_allow", "allow_all"];
|
|
19
|
+
export type PersonGeneration = typeof PERSON_GENERATION_OPTIONS[number];
|
|
20
|
+
export declare const COMPRESSION_QUALITY_OPTIONS: readonly ["optimized", "lossless"];
|
|
21
|
+
export type CompressionQuality = typeof COMPRESSION_QUALITY_OPTIONS[number];
|
|
22
|
+
export declare const RESIZE_MODES: readonly ["pad", "crop"];
|
|
23
|
+
export type ResizeMode = typeof RESIZE_MODES[number];
|
|
24
|
+
export declare const REFERENCE_TYPES: readonly ["asset", "style"];
|
|
25
|
+
export type ReferenceType = typeof REFERENCE_TYPES[number];
|
|
26
|
+
export interface ReferenceImage {
|
|
27
|
+
image: string;
|
|
28
|
+
reference_type: ReferenceType;
|
|
29
|
+
}
|
|
30
|
+
export declare const PRICING: Record<Model, Partial<Record<Resolution, {
|
|
31
|
+
video: number;
|
|
32
|
+
video_audio: number;
|
|
33
|
+
}>>>;
|
|
34
|
+
export declare const DEFAULT_POLL_INTERVAL = 15000;
|
|
35
|
+
export declare const DEFAULT_MAX_POLL_ATTEMPTS = 120;
|
|
36
|
+
export declare const GEMINI_API_BASE_URL = "https://generativelanguage.googleapis.com/v1beta";
|
|
37
|
+
export interface GenerateVideoParams {
|
|
38
|
+
prompt: string;
|
|
39
|
+
model?: Model | string;
|
|
40
|
+
aspect_ratio?: AspectRatio | string;
|
|
41
|
+
resolution?: Resolution | string;
|
|
42
|
+
duration_seconds?: Duration | number | string;
|
|
43
|
+
generate_audio?: boolean;
|
|
44
|
+
negative_prompt?: string;
|
|
45
|
+
image?: string;
|
|
46
|
+
reference_images?: ReferenceImage[];
|
|
47
|
+
sample_count?: number | string;
|
|
48
|
+
person_generation?: PersonGeneration | string;
|
|
49
|
+
seed?: number | string;
|
|
50
|
+
compression_quality?: CompressionQuality | string;
|
|
51
|
+
resize_mode?: ResizeMode | string;
|
|
52
|
+
storage_uri?: string;
|
|
53
|
+
output_path?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface ExtendVideoParams {
|
|
56
|
+
video: string;
|
|
57
|
+
prompt?: string;
|
|
58
|
+
output_path?: string;
|
|
59
|
+
}
|
|
60
|
+
export interface InterpolateFramesParams {
|
|
61
|
+
first_frame: string;
|
|
62
|
+
last_frame: string;
|
|
63
|
+
prompt?: string;
|
|
64
|
+
duration_seconds?: Duration | number | string;
|
|
65
|
+
generate_audio?: boolean;
|
|
66
|
+
output_path?: string;
|
|
67
|
+
}
|
|
68
|
+
export interface GetVideoStatusParams {
|
|
69
|
+
operation_name: string;
|
|
70
|
+
}
|
|
71
|
+
export interface VeoImageInput {
|
|
72
|
+
bytesBase64Encoded?: string;
|
|
73
|
+
gcsUri?: string;
|
|
74
|
+
}
|
|
75
|
+
export interface VeoVideoInput {
|
|
76
|
+
bytesBase64Encoded?: string;
|
|
77
|
+
uri?: string;
|
|
78
|
+
}
|
|
79
|
+
export interface VeoReferenceImageInput {
|
|
80
|
+
image: VeoImageInput;
|
|
81
|
+
referenceType: ReferenceType;
|
|
82
|
+
}
|
|
83
|
+
export interface VeoGenerateRequest {
|
|
84
|
+
instances: Array<{
|
|
85
|
+
prompt?: string;
|
|
86
|
+
image?: VeoImageInput;
|
|
87
|
+
lastFrame?: VeoImageInput;
|
|
88
|
+
video?: VeoVideoInput;
|
|
89
|
+
referenceImages?: VeoReferenceImageInput[];
|
|
90
|
+
}>;
|
|
91
|
+
parameters: {
|
|
92
|
+
aspectRatio?: string;
|
|
93
|
+
resolution?: string;
|
|
94
|
+
durationSeconds?: number;
|
|
95
|
+
sampleCount?: number;
|
|
96
|
+
generateAudio?: boolean;
|
|
97
|
+
negativePrompt?: string;
|
|
98
|
+
personGeneration?: string;
|
|
99
|
+
seed?: number;
|
|
100
|
+
compressionQuality?: string;
|
|
101
|
+
resizeMode?: string;
|
|
102
|
+
storageUri?: string;
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
export interface VeoGeneratedVideo {
|
|
106
|
+
video: {
|
|
107
|
+
uri?: string;
|
|
108
|
+
bytesBase64Encoded?: string;
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
export interface VeoOperationResponse {
|
|
112
|
+
name: string;
|
|
113
|
+
done?: boolean;
|
|
114
|
+
metadata?: Record<string, unknown>;
|
|
115
|
+
response?: {
|
|
116
|
+
generatedVideos?: VeoGeneratedVideo[];
|
|
117
|
+
};
|
|
118
|
+
error?: {
|
|
119
|
+
code: number;
|
|
120
|
+
message: string;
|
|
121
|
+
details?: Array<Record<string, unknown>>;
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
export interface VideoGenerationResult {
|
|
125
|
+
success: boolean;
|
|
126
|
+
operation_name?: string;
|
|
127
|
+
video_url?: string;
|
|
128
|
+
video_path?: string;
|
|
129
|
+
duration_seconds?: number;
|
|
130
|
+
estimated_cost?: number;
|
|
131
|
+
error?: string;
|
|
132
|
+
failure_reason?: string;
|
|
133
|
+
}
|
|
134
|
+
export interface VideoStatusResult {
|
|
135
|
+
success: boolean;
|
|
136
|
+
operation_name: string;
|
|
137
|
+
done: boolean;
|
|
138
|
+
video_url?: string;
|
|
139
|
+
error?: string;
|
|
140
|
+
failure_reason?: string;
|
|
141
|
+
}
|
|
142
|
+
export declare function isValidModel(model: string): model is Model;
|
|
143
|
+
export declare function isValidResolution(resolution: string): resolution is Resolution;
|
|
144
|
+
export declare function isValidAspectRatio(ratio: string): ratio is AspectRatio;
|
|
145
|
+
export declare function isValidDuration(duration: number): duration is Duration;
|
|
146
|
+
export declare function isValidReferenceType(type: string): type is ReferenceType;
|
|
147
|
+
export declare function isValidPersonGeneration(value: string): value is PersonGeneration;
|
|
148
|
+
export declare function isValidResolutionForModel(resolution: Resolution, model: Model): boolean;
|
|
149
|
+
export declare function calculateCost(model: Model, resolution: Resolution, durationSeconds: number, generateAudio: boolean): number;
|
|
150
|
+
export declare function normalizeModel(model?: string): Model;
|
|
151
|
+
export declare function normalizeResolution(resolution?: string): Resolution;
|
|
152
|
+
export declare function normalizeAspectRatio(ratio?: string): AspectRatio;
|
|
153
|
+
export declare function normalizeDuration(duration?: number | string): Duration;
|
|
154
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/types/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Google Veo 3.1 API Type Definitions
|
|
3
|
+
*/
|
|
4
|
+
// =============================================================================
|
|
5
|
+
// Model Definitions
|
|
6
|
+
// =============================================================================
|
|
7
|
+
export const MODELS = [
|
|
8
|
+
'veo-3.1-generate-preview',
|
|
9
|
+
'veo-3.1-fast-generate-preview'
|
|
10
|
+
];
|
|
11
|
+
export const DEFAULT_MODEL = 'veo-3.1-generate-preview';
|
|
12
|
+
// =============================================================================
|
|
13
|
+
// Video Configuration
|
|
14
|
+
// =============================================================================
|
|
15
|
+
export const RESOLUTIONS = ['720p', '1080p', '4k'];
|
|
16
|
+
export const DEFAULT_RESOLUTION = '720p';
|
|
17
|
+
export const ASPECT_RATIOS = ['16:9', '9:16'];
|
|
18
|
+
export const DEFAULT_ASPECT_RATIO = '16:9';
|
|
19
|
+
export const DURATIONS = [4, 6, 8];
|
|
20
|
+
export const DEFAULT_DURATION = 8;
|
|
21
|
+
export const EXTENSION_DURATION = 7; // Video extension is always 7 seconds
|
|
22
|
+
export const EXTENSION_RESOLUTION = '720p'; // Extension is always 720p
|
|
23
|
+
export const PERSON_GENERATION_OPTIONS = ['allow_adult', 'dont_allow', 'allow_all'];
|
|
24
|
+
export const COMPRESSION_QUALITY_OPTIONS = ['optimized', 'lossless'];
|
|
25
|
+
export const RESIZE_MODES = ['pad', 'crop'];
|
|
26
|
+
// =============================================================================
|
|
27
|
+
// Reference Image Types
|
|
28
|
+
// =============================================================================
|
|
29
|
+
export const REFERENCE_TYPES = ['asset', 'style'];
|
|
30
|
+
// =============================================================================
|
|
31
|
+
// Pricing (USD per second)
|
|
32
|
+
// =============================================================================
|
|
33
|
+
export const PRICING = {
|
|
34
|
+
'veo-3.1-generate-preview': {
|
|
35
|
+
'720p': { video: 0.20, video_audio: 0.40 },
|
|
36
|
+
'1080p': { video: 0.20, video_audio: 0.40 },
|
|
37
|
+
'4k': { video: 0.40, video_audio: 0.60 }
|
|
38
|
+
},
|
|
39
|
+
'veo-3.1-fast-generate-preview': {
|
|
40
|
+
'720p': { video: 0.10, video_audio: 0.20 },
|
|
41
|
+
'1080p': { video: 0.10, video_audio: 0.20 }
|
|
42
|
+
// 4k not available for fast model
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
// =============================================================================
|
|
46
|
+
// Polling Configuration
|
|
47
|
+
// =============================================================================
|
|
48
|
+
export const DEFAULT_POLL_INTERVAL = 15000; // 15 seconds
|
|
49
|
+
export const DEFAULT_MAX_POLL_ATTEMPTS = 120; // ~30 minutes with 15s interval
|
|
50
|
+
// =============================================================================
|
|
51
|
+
// API Configuration
|
|
52
|
+
// =============================================================================
|
|
53
|
+
export const GEMINI_API_BASE_URL = 'https://generativelanguage.googleapis.com/v1beta';
|
|
54
|
+
// =============================================================================
|
|
55
|
+
// Validation Functions
|
|
56
|
+
// =============================================================================
|
|
57
|
+
export function isValidModel(model) {
|
|
58
|
+
return MODELS.includes(model);
|
|
59
|
+
}
|
|
60
|
+
export function isValidResolution(resolution) {
|
|
61
|
+
return RESOLUTIONS.includes(resolution);
|
|
62
|
+
}
|
|
63
|
+
export function isValidAspectRatio(ratio) {
|
|
64
|
+
return ASPECT_RATIOS.includes(ratio);
|
|
65
|
+
}
|
|
66
|
+
export function isValidDuration(duration) {
|
|
67
|
+
return DURATIONS.includes(duration);
|
|
68
|
+
}
|
|
69
|
+
export function isValidReferenceType(type) {
|
|
70
|
+
return REFERENCE_TYPES.includes(type);
|
|
71
|
+
}
|
|
72
|
+
export function isValidPersonGeneration(value) {
|
|
73
|
+
return PERSON_GENERATION_OPTIONS.includes(value);
|
|
74
|
+
}
|
|
75
|
+
export function isValidResolutionForModel(resolution, model) {
|
|
76
|
+
if (model === 'veo-3.1-fast-generate-preview' && resolution === '4k') {
|
|
77
|
+
return false; // 4k not available for fast model
|
|
78
|
+
}
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
// =============================================================================
|
|
82
|
+
// Cost Calculation
|
|
83
|
+
// =============================================================================
|
|
84
|
+
export function calculateCost(model, resolution, durationSeconds, generateAudio) {
|
|
85
|
+
const modelPricing = PRICING[model];
|
|
86
|
+
const resolutionPricing = modelPricing[resolution];
|
|
87
|
+
if (!resolutionPricing) {
|
|
88
|
+
// Fall back to 1080p pricing if resolution not found
|
|
89
|
+
const fallbackPricing = modelPricing['1080p'];
|
|
90
|
+
if (!fallbackPricing)
|
|
91
|
+
return 0;
|
|
92
|
+
const pricePerSecond = generateAudio ? fallbackPricing.video_audio : fallbackPricing.video;
|
|
93
|
+
return pricePerSecond * durationSeconds;
|
|
94
|
+
}
|
|
95
|
+
const pricePerSecond = generateAudio ? resolutionPricing.video_audio : resolutionPricing.video;
|
|
96
|
+
return pricePerSecond * durationSeconds;
|
|
97
|
+
}
|
|
98
|
+
// =============================================================================
|
|
99
|
+
// Parameter Normalization
|
|
100
|
+
// =============================================================================
|
|
101
|
+
export function normalizeModel(model) {
|
|
102
|
+
if (!model)
|
|
103
|
+
return DEFAULT_MODEL;
|
|
104
|
+
if (isValidModel(model))
|
|
105
|
+
return model;
|
|
106
|
+
return DEFAULT_MODEL;
|
|
107
|
+
}
|
|
108
|
+
export function normalizeResolution(resolution) {
|
|
109
|
+
if (!resolution)
|
|
110
|
+
return DEFAULT_RESOLUTION;
|
|
111
|
+
if (isValidResolution(resolution))
|
|
112
|
+
return resolution;
|
|
113
|
+
return DEFAULT_RESOLUTION;
|
|
114
|
+
}
|
|
115
|
+
export function normalizeAspectRatio(ratio) {
|
|
116
|
+
if (!ratio)
|
|
117
|
+
return DEFAULT_ASPECT_RATIO;
|
|
118
|
+
if (isValidAspectRatio(ratio))
|
|
119
|
+
return ratio;
|
|
120
|
+
return DEFAULT_ASPECT_RATIO;
|
|
121
|
+
}
|
|
122
|
+
export function normalizeDuration(duration) {
|
|
123
|
+
if (duration === undefined || duration === null)
|
|
124
|
+
return DEFAULT_DURATION;
|
|
125
|
+
const numDuration = typeof duration === 'string' ? parseInt(duration, 10) : duration;
|
|
126
|
+
if (isNaN(numDuration))
|
|
127
|
+
return DEFAULT_DURATION;
|
|
128
|
+
if (isValidDuration(numDuration))
|
|
129
|
+
return numDuration;
|
|
130
|
+
// Find closest valid duration
|
|
131
|
+
const sorted = [...DURATIONS].sort((a, b) => Math.abs(a - numDuration) - Math.abs(b - numDuration));
|
|
132
|
+
return sorted[0];
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/types/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Batch Configuration Loading and Validation
|
|
3
|
+
*/
|
|
4
|
+
import { type BatchConfig, type BatchJob, type BatchExecutionOptions } from '../types/batch.js';
|
|
5
|
+
/**
|
|
6
|
+
* Load batch configuration from a JSON file
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadBatchConfig(configPath: string): BatchConfig;
|
|
9
|
+
/**
|
|
10
|
+
* Validate batch configuration
|
|
11
|
+
*/
|
|
12
|
+
export declare function validateBatchConfig(config: BatchConfig): string[];
|
|
13
|
+
/**
|
|
14
|
+
* Merge configuration with CLI options and environment variables
|
|
15
|
+
* Priority: CLI options > Environment > Config file > Defaults
|
|
16
|
+
*/
|
|
17
|
+
export declare function mergeBatchConfig(config: BatchConfig, cliOptions: Partial<BatchExecutionOptions>): BatchExecutionOptions;
|
|
18
|
+
/**
|
|
19
|
+
* Resolve output path for a job
|
|
20
|
+
*/
|
|
21
|
+
export declare function resolveOutputPath(job: BatchJob, index: number, outputDir: string, configDir: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Apply defaults from config to a job
|
|
24
|
+
*/
|
|
25
|
+
export declare function applyJobDefaults(job: BatchJob, config: BatchConfig): BatchJob;
|
|
26
|
+
//# sourceMappingURL=batch-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-config.d.ts","sourceRoot":"","sources":["../../src/utils/batch-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,qBAAqB,EAO3B,MAAM,mBAAmB,CAAC;AAc3B;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,CAkB/D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE,CA0FjE;AAoFD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,OAAO,CAAC,qBAAqB,CAAC,GACzC,qBAAqB,CA+BvB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,CAcR;AAiBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAG,QAAQ,CA0B7E"}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Batch Configuration Loading and Validation
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from 'fs';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import { DEFAULT_BATCH_OPTIONS, DEFAULT_RETRY_POLICY, BATCH_CONSTRAINTS } from '../types/batch.js';
|
|
7
|
+
import { DEFAULT_MODEL, DEFAULT_RESOLUTION, DEFAULT_ASPECT_RATIO, DEFAULT_DURATION, isValidModel, isValidResolution, isValidAspectRatio, isValidDuration, isValidReferenceType } from '../types/tools.js';
|
|
8
|
+
import { debugLog } from './debug.js';
|
|
9
|
+
/**
|
|
10
|
+
* Load batch configuration from a JSON file
|
|
11
|
+
*/
|
|
12
|
+
export function loadBatchConfig(configPath) {
|
|
13
|
+
const absolutePath = path.isAbsolute(configPath)
|
|
14
|
+
? configPath
|
|
15
|
+
: path.resolve(process.cwd(), configPath);
|
|
16
|
+
if (!fs.existsSync(absolutePath)) {
|
|
17
|
+
throw new Error(`Configuration file not found: ${absolutePath}`);
|
|
18
|
+
}
|
|
19
|
+
const content = fs.readFileSync(absolutePath, 'utf-8');
|
|
20
|
+
try {
|
|
21
|
+
const config = JSON.parse(content);
|
|
22
|
+
debugLog('Loaded batch config', config);
|
|
23
|
+
return config;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
throw new Error(`Failed to parse configuration file: ${error instanceof Error ? error.message : String(error)}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Validate batch configuration
|
|
31
|
+
*/
|
|
32
|
+
export function validateBatchConfig(config) {
|
|
33
|
+
const errors = [];
|
|
34
|
+
// Validate jobs array
|
|
35
|
+
if (!config.jobs || !Array.isArray(config.jobs)) {
|
|
36
|
+
errors.push('Configuration must have a "jobs" array');
|
|
37
|
+
return errors;
|
|
38
|
+
}
|
|
39
|
+
if (config.jobs.length < BATCH_CONSTRAINTS.minJobs) {
|
|
40
|
+
errors.push(`At least ${BATCH_CONSTRAINTS.minJobs} job is required`);
|
|
41
|
+
}
|
|
42
|
+
if (config.jobs.length > BATCH_CONSTRAINTS.maxJobs) {
|
|
43
|
+
errors.push(`Maximum ${BATCH_CONSTRAINTS.maxJobs} jobs allowed`);
|
|
44
|
+
}
|
|
45
|
+
// Validate each job
|
|
46
|
+
config.jobs.forEach((job, index) => {
|
|
47
|
+
const jobErrors = validateJob(job, index);
|
|
48
|
+
errors.push(...jobErrors);
|
|
49
|
+
});
|
|
50
|
+
// Validate default model
|
|
51
|
+
if (config.default_model && !isValidModel(config.default_model)) {
|
|
52
|
+
errors.push(`Invalid default_model: ${config.default_model}`);
|
|
53
|
+
}
|
|
54
|
+
// Validate default resolution
|
|
55
|
+
if (config.default_resolution && !isValidResolution(config.default_resolution)) {
|
|
56
|
+
errors.push(`Invalid default_resolution: ${config.default_resolution}`);
|
|
57
|
+
}
|
|
58
|
+
// Validate default aspect ratio
|
|
59
|
+
if (config.default_aspect_ratio && !isValidAspectRatio(config.default_aspect_ratio)) {
|
|
60
|
+
errors.push(`Invalid default_aspect_ratio: ${config.default_aspect_ratio}`);
|
|
61
|
+
}
|
|
62
|
+
// Validate default duration
|
|
63
|
+
if (config.default_duration_seconds !== undefined) {
|
|
64
|
+
const duration = typeof config.default_duration_seconds === 'number'
|
|
65
|
+
? config.default_duration_seconds
|
|
66
|
+
: parseInt(String(config.default_duration_seconds), 10);
|
|
67
|
+
if (!isValidDuration(duration)) {
|
|
68
|
+
errors.push(`Invalid default_duration_seconds: ${config.default_duration_seconds}. Must be 4, 6, or 8`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Validate max_concurrent
|
|
72
|
+
if (config.max_concurrent !== undefined) {
|
|
73
|
+
if (config.max_concurrent < BATCH_CONSTRAINTS.minConcurrent ||
|
|
74
|
+
config.max_concurrent > BATCH_CONSTRAINTS.maxConcurrent) {
|
|
75
|
+
errors.push(`max_concurrent must be between ${BATCH_CONSTRAINTS.minConcurrent} and ${BATCH_CONSTRAINTS.maxConcurrent}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Validate poll_interval
|
|
79
|
+
if (config.poll_interval !== undefined) {
|
|
80
|
+
if (config.poll_interval < BATCH_CONSTRAINTS.minPollInterval ||
|
|
81
|
+
config.poll_interval > BATCH_CONSTRAINTS.maxPollInterval) {
|
|
82
|
+
errors.push(`poll_interval must be between ${BATCH_CONSTRAINTS.minPollInterval} and ${BATCH_CONSTRAINTS.maxPollInterval}ms`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Validate timeout
|
|
86
|
+
if (config.timeout !== undefined) {
|
|
87
|
+
if (config.timeout < BATCH_CONSTRAINTS.minTimeout ||
|
|
88
|
+
config.timeout > BATCH_CONSTRAINTS.maxTimeout) {
|
|
89
|
+
errors.push(`timeout must be between ${BATCH_CONSTRAINTS.minTimeout} and ${BATCH_CONSTRAINTS.maxTimeout}ms`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Validate retry policy
|
|
93
|
+
if (config.retry_policy) {
|
|
94
|
+
if (config.retry_policy.max_retries !== undefined) {
|
|
95
|
+
if (config.retry_policy.max_retries < BATCH_CONSTRAINTS.minRetries ||
|
|
96
|
+
config.retry_policy.max_retries > BATCH_CONSTRAINTS.maxRetries) {
|
|
97
|
+
errors.push(`retry_policy.max_retries must be between ${BATCH_CONSTRAINTS.minRetries} and ${BATCH_CONSTRAINTS.maxRetries}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (config.retry_policy.retry_delay_ms !== undefined) {
|
|
101
|
+
if (config.retry_policy.retry_delay_ms < BATCH_CONSTRAINTS.minRetryDelay ||
|
|
102
|
+
config.retry_policy.retry_delay_ms > BATCH_CONSTRAINTS.maxRetryDelay) {
|
|
103
|
+
errors.push(`retry_policy.retry_delay_ms must be between ${BATCH_CONSTRAINTS.minRetryDelay} and ${BATCH_CONSTRAINTS.maxRetryDelay}ms`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return errors;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Validate a single job
|
|
111
|
+
*/
|
|
112
|
+
function validateJob(job, index) {
|
|
113
|
+
const errors = [];
|
|
114
|
+
const prefix = `Job ${index + 1}`;
|
|
115
|
+
const jobType = job.type || 'generate';
|
|
116
|
+
switch (jobType) {
|
|
117
|
+
case 'generate': {
|
|
118
|
+
const genJob = job;
|
|
119
|
+
if (!genJob.prompt && !genJob.image) {
|
|
120
|
+
errors.push(`${prefix}: Either prompt or image is required for generate jobs`);
|
|
121
|
+
}
|
|
122
|
+
if (genJob.model && !isValidModel(genJob.model)) {
|
|
123
|
+
errors.push(`${prefix}: Invalid model: ${genJob.model}`);
|
|
124
|
+
}
|
|
125
|
+
if (genJob.resolution && !isValidResolution(genJob.resolution)) {
|
|
126
|
+
errors.push(`${prefix}: Invalid resolution: ${genJob.resolution}`);
|
|
127
|
+
}
|
|
128
|
+
if (genJob.aspect_ratio && !isValidAspectRatio(genJob.aspect_ratio)) {
|
|
129
|
+
errors.push(`${prefix}: Invalid aspect_ratio: ${genJob.aspect_ratio}`);
|
|
130
|
+
}
|
|
131
|
+
if (genJob.duration_seconds !== undefined) {
|
|
132
|
+
const duration = typeof genJob.duration_seconds === 'number'
|
|
133
|
+
? genJob.duration_seconds
|
|
134
|
+
: parseInt(String(genJob.duration_seconds), 10);
|
|
135
|
+
if (!isValidDuration(duration)) {
|
|
136
|
+
errors.push(`${prefix}: Invalid duration_seconds: ${genJob.duration_seconds}. Must be 4, 6, or 8`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (genJob.reference_images) {
|
|
140
|
+
if (!Array.isArray(genJob.reference_images)) {
|
|
141
|
+
errors.push(`${prefix}: reference_images must be an array`);
|
|
142
|
+
}
|
|
143
|
+
else if (genJob.reference_images.length > 3) {
|
|
144
|
+
errors.push(`${prefix}: Maximum 3 reference images allowed`);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
genJob.reference_images.forEach((ref, refIndex) => {
|
|
148
|
+
if (!ref.image) {
|
|
149
|
+
errors.push(`${prefix}: Reference image ${refIndex + 1} missing image`);
|
|
150
|
+
}
|
|
151
|
+
if (!ref.reference_type || !isValidReferenceType(ref.reference_type)) {
|
|
152
|
+
errors.push(`${prefix}: Reference image ${refIndex + 1} has invalid reference_type. Must be "asset" or "style"`);
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
case 'extend': {
|
|
160
|
+
const extJob = job;
|
|
161
|
+
if (!extJob.video) {
|
|
162
|
+
errors.push(`${prefix}: video is required for extend jobs`);
|
|
163
|
+
}
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
case 'interpolate': {
|
|
167
|
+
const intJob = job;
|
|
168
|
+
if (!intJob.first_frame) {
|
|
169
|
+
errors.push(`${prefix}: first_frame is required for interpolate jobs`);
|
|
170
|
+
}
|
|
171
|
+
if (!intJob.last_frame) {
|
|
172
|
+
errors.push(`${prefix}: last_frame is required for interpolate jobs`);
|
|
173
|
+
}
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
default:
|
|
177
|
+
errors.push(`${prefix}: Invalid job type: ${jobType}`);
|
|
178
|
+
}
|
|
179
|
+
return errors;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Merge configuration with CLI options and environment variables
|
|
183
|
+
* Priority: CLI options > Environment > Config file > Defaults
|
|
184
|
+
*/
|
|
185
|
+
export function mergeBatchConfig(config, cliOptions) {
|
|
186
|
+
// Start with defaults
|
|
187
|
+
const merged = { ...DEFAULT_BATCH_OPTIONS };
|
|
188
|
+
// Apply config file settings
|
|
189
|
+
if (config.output_dir)
|
|
190
|
+
merged.outputDir = config.output_dir;
|
|
191
|
+
if (config.max_concurrent)
|
|
192
|
+
merged.maxConcurrent = config.max_concurrent;
|
|
193
|
+
if (config.poll_interval)
|
|
194
|
+
merged.pollInterval = config.poll_interval;
|
|
195
|
+
if (config.timeout)
|
|
196
|
+
merged.timeout = config.timeout;
|
|
197
|
+
if (config.retry_policy) {
|
|
198
|
+
merged.retryPolicy = {
|
|
199
|
+
...DEFAULT_RETRY_POLICY,
|
|
200
|
+
...config.retry_policy
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
// Apply environment variables
|
|
204
|
+
if (process.env.OUTPUT_DIR)
|
|
205
|
+
merged.outputDir = process.env.OUTPUT_DIR;
|
|
206
|
+
// Apply CLI options (highest priority)
|
|
207
|
+
if (cliOptions.outputDir)
|
|
208
|
+
merged.outputDir = cliOptions.outputDir;
|
|
209
|
+
if (cliOptions.maxConcurrent)
|
|
210
|
+
merged.maxConcurrent = cliOptions.maxConcurrent;
|
|
211
|
+
if (cliOptions.pollInterval)
|
|
212
|
+
merged.pollInterval = cliOptions.pollInterval;
|
|
213
|
+
if (cliOptions.timeout)
|
|
214
|
+
merged.timeout = cliOptions.timeout;
|
|
215
|
+
if (cliOptions.estimateOnly !== undefined)
|
|
216
|
+
merged.estimateOnly = cliOptions.estimateOnly;
|
|
217
|
+
if (cliOptions.format)
|
|
218
|
+
merged.format = cliOptions.format;
|
|
219
|
+
if (cliOptions.noAudio !== undefined)
|
|
220
|
+
merged.noAudio = cliOptions.noAudio;
|
|
221
|
+
if (cliOptions.allowAnyPath !== undefined)
|
|
222
|
+
merged.allowAnyPath = cliOptions.allowAnyPath;
|
|
223
|
+
debugLog('Merged batch options', merged);
|
|
224
|
+
return merged;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Resolve output path for a job
|
|
228
|
+
*/
|
|
229
|
+
export function resolveOutputPath(job, index, outputDir, configDir) {
|
|
230
|
+
if (job.output_path) {
|
|
231
|
+
if (path.isAbsolute(job.output_path)) {
|
|
232
|
+
return job.output_path;
|
|
233
|
+
}
|
|
234
|
+
return path.resolve(configDir, job.output_path);
|
|
235
|
+
}
|
|
236
|
+
// Generate default output path
|
|
237
|
+
const prefix = getJobPrefix(job);
|
|
238
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
|
|
239
|
+
const filename = `${prefix}_${index + 1}_${timestamp}.mp4`;
|
|
240
|
+
return path.join(outputDir, filename);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Get prefix for job output filename
|
|
244
|
+
*/
|
|
245
|
+
function getJobPrefix(job) {
|
|
246
|
+
const jobType = job.type || 'generate';
|
|
247
|
+
switch (jobType) {
|
|
248
|
+
case 'extend':
|
|
249
|
+
return 'veo3_extended';
|
|
250
|
+
case 'interpolate':
|
|
251
|
+
return 'veo3_interpolated';
|
|
252
|
+
default:
|
|
253
|
+
return 'veo3';
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Apply defaults from config to a job
|
|
258
|
+
*/
|
|
259
|
+
export function applyJobDefaults(job, config) {
|
|
260
|
+
const jobType = job.type || 'generate';
|
|
261
|
+
if (jobType === 'generate') {
|
|
262
|
+
const genJob = job;
|
|
263
|
+
return {
|
|
264
|
+
...genJob,
|
|
265
|
+
model: genJob.model || config.default_model || DEFAULT_MODEL,
|
|
266
|
+
resolution: genJob.resolution || config.default_resolution || DEFAULT_RESOLUTION,
|
|
267
|
+
aspect_ratio: genJob.aspect_ratio || config.default_aspect_ratio || DEFAULT_ASPECT_RATIO,
|
|
268
|
+
duration_seconds: genJob.duration_seconds ?? config.default_duration_seconds ?? DEFAULT_DURATION,
|
|
269
|
+
generate_audio: genJob.generate_audio ?? config.default_generate_audio ?? true
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
if (jobType === 'interpolate') {
|
|
273
|
+
const intJob = job;
|
|
274
|
+
return {
|
|
275
|
+
...intJob,
|
|
276
|
+
duration_seconds: intJob.duration_seconds ?? config.default_duration_seconds ?? DEFAULT_DURATION,
|
|
277
|
+
generate_audio: intJob.generate_audio ?? config.default_generate_audio ?? true
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
// extend jobs don't have configurable defaults
|
|
281
|
+
return job;
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=batch-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-config.js","sourceRoot":"","sources":["../../src/utils/batch-config.ts"],"names":[],"mappings":"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"}
|