feat: add video generation core infrastructure and extend image generation parameters (#53681)

* feat: add video generation core infrastructure and extend image generation parameters

Add full video generation capability to OpenClaw core:

- New `video_generate` agent tool with support for prompt, duration, aspect ratio,
  resolution, seed, watermark, I2V (first/last frame), camerafixed, and draft mode
- New `VideoGenerationProvider` plugin SDK type and `registerVideoGenerationProvider` API
- New `src/video-generation/` module (types, runtime with fallback, provider registry)
- New `openclaw/plugin-sdk/video-generation` export for external plugins
- 200MB max file size for generated videos (vs default 5MB for images)

Extend image generation with additional parameters:
- `seed`, `watermark`, `guidanceScale`, `optimizePrompt`, `providerOptions`
- New `readBooleanParam()` helper in tool common utilities

Update plugin registry, contracts, and all test mocks to include
`videoGenerationProviders` and `videoGenerationProviderIds`.

Made-with: Cursor

* fix: validate aspect ratio against target provider when model override is set

* cleanup: remove redundant ?? undefined from video/image generate tools

* chore: regenerate plugin SDK API baseline after video generation additions

---------

Co-authored-by: yongliang.xie <yongliang.xie@bytedance.com>
This commit is contained in:
xieyongliang
2026-03-26 09:45:06 +08:00
committed by GitHub
parent 39fbfd9b28
commit 4cb8dde894
37 changed files with 1380 additions and 241 deletions

View File

@@ -352,7 +352,7 @@
"exportName": "ImageGenerationProvider",
"kind": "type",
"source": {
"line": 66,
"line": 72,
"path": "src/image-generation/types.ts"
}
},
@@ -379,7 +379,7 @@
"exportName": "ImageGenerationResult",
"kind": "type",
"source": {
"line": 36,
"line": 42,
"path": "src/image-generation/types.ts"
}
},
@@ -397,7 +397,7 @@
"exportName": "MediaUnderstandingProviderPlugin",
"kind": "type",
"source": {
"line": 951,
"line": 952,
"path": "src/plugins/types.ts"
}
},
@@ -415,7 +415,7 @@
"exportName": "OpenClawPluginApi",
"kind": "type",
"source": {
"line": 1314,
"line": 1316,
"path": "src/plugins/types.ts"
}
},
@@ -424,7 +424,7 @@
"exportName": "OpenClawPluginConfigSchema",
"kind": "type",
"source": {
"line": 88,
"line": 89,
"path": "src/plugins/types.ts"
}
},
@@ -433,7 +433,7 @@
"exportName": "PluginLogger",
"kind": "type",
"source": {
"line": 59,
"line": 60,
"path": "src/plugins/types.ts"
}
},
@@ -451,7 +451,7 @@
"exportName": "ProviderAuthContext",
"kind": "type",
"source": {
"line": 155,
"line": 156,
"path": "src/plugins/types.ts"
}
},
@@ -460,7 +460,7 @@
"exportName": "ProviderAuthResult",
"kind": "type",
"source": {
"line": 140,
"line": 141,
"path": "src/plugins/types.ts"
}
},
@@ -469,7 +469,7 @@
"exportName": "ProviderRuntimeModel",
"kind": "type",
"source": {
"line": 295,
"line": 296,
"path": "src/plugins/types.ts"
}
},
@@ -523,7 +523,7 @@
"exportName": "SpeechProviderPlugin",
"kind": "type",
"source": {
"line": 933,
"line": 934,
"path": "src/plugins/types.ts"
}
},
@@ -3396,7 +3396,7 @@
"exportName": "MediaUnderstandingProviderPlugin",
"kind": "type",
"source": {
"line": 951,
"line": 952,
"path": "src/plugins/types.ts"
}
},
@@ -3414,7 +3414,7 @@
"exportName": "OpenClawPluginApi",
"kind": "type",
"source": {
"line": 1314,
"line": 1316,
"path": "src/plugins/types.ts"
}
},
@@ -3423,7 +3423,7 @@
"exportName": "OpenClawPluginCommandDefinition",
"kind": "type",
"source": {
"line": 1068,
"line": 1070,
"path": "src/plugins/types.ts"
}
},
@@ -3432,7 +3432,7 @@
"exportName": "OpenClawPluginConfigSchema",
"kind": "type",
"source": {
"line": 88,
"line": 89,
"path": "src/plugins/types.ts"
}
},
@@ -3441,7 +3441,7 @@
"exportName": "OpenClawPluginDefinition",
"kind": "type",
"source": {
"line": 1296,
"line": 1298,
"path": "src/plugins/types.ts"
}
},
@@ -3450,7 +3450,7 @@
"exportName": "OpenClawPluginService",
"kind": "type",
"source": {
"line": 1285,
"line": 1287,
"path": "src/plugins/types.ts"
}
},
@@ -3459,7 +3459,7 @@
"exportName": "OpenClawPluginServiceContext",
"kind": "type",
"source": {
"line": 1277,
"line": 1279,
"path": "src/plugins/types.ts"
}
},
@@ -3468,7 +3468,7 @@
"exportName": "OpenClawPluginToolContext",
"kind": "type",
"source": {
"line": 103,
"line": 104,
"path": "src/plugins/types.ts"
}
},
@@ -3477,7 +3477,7 @@
"exportName": "OpenClawPluginToolFactory",
"kind": "type",
"source": {
"line": 120,
"line": 121,
"path": "src/plugins/types.ts"
}
},
@@ -3486,7 +3486,7 @@
"exportName": "PluginCommandContext",
"kind": "type",
"source": {
"line": 966,
"line": 968,
"path": "src/plugins/types.ts"
}
},
@@ -3495,7 +3495,7 @@
"exportName": "PluginInteractiveTelegramHandlerContext",
"kind": "type",
"source": {
"line": 1097,
"line": 1099,
"path": "src/plugins/types.ts"
}
},
@@ -3504,7 +3504,7 @@
"exportName": "PluginLogger",
"kind": "type",
"source": {
"line": 59,
"line": 60,
"path": "src/plugins/types.ts"
}
},
@@ -3522,7 +3522,7 @@
"exportName": "ProviderAugmentModelCatalogContext",
"kind": "type",
"source": {
"line": 571,
"line": 572,
"path": "src/plugins/types.ts"
}
},
@@ -3531,7 +3531,7 @@
"exportName": "ProviderAuthContext",
"kind": "type",
"source": {
"line": 155,
"line": 156,
"path": "src/plugins/types.ts"
}
},
@@ -3540,7 +3540,7 @@
"exportName": "ProviderAuthDoctorHintContext",
"kind": "type",
"source": {
"line": 446,
"line": 447,
"path": "src/plugins/types.ts"
}
},
@@ -3549,7 +3549,7 @@
"exportName": "ProviderAuthMethod",
"kind": "type",
"source": {
"line": 233,
"line": 234,
"path": "src/plugins/types.ts"
}
},
@@ -3558,7 +3558,7 @@
"exportName": "ProviderAuthMethodNonInteractiveContext",
"kind": "type",
"source": {
"line": 217,
"line": 218,
"path": "src/plugins/types.ts"
}
},
@@ -3567,7 +3567,7 @@
"exportName": "ProviderAuthResult",
"kind": "type",
"source": {
"line": 140,
"line": 141,
"path": "src/plugins/types.ts"
}
},
@@ -3576,7 +3576,7 @@
"exportName": "ProviderBuildMissingAuthMessageContext",
"kind": "type",
"source": {
"line": 499,
"line": 500,
"path": "src/plugins/types.ts"
}
},
@@ -3585,7 +3585,7 @@
"exportName": "ProviderBuiltInModelSuppressionContext",
"kind": "type",
"source": {
"line": 515,
"line": 516,
"path": "src/plugins/types.ts"
}
},
@@ -3594,7 +3594,7 @@
"exportName": "ProviderBuiltInModelSuppressionResult",
"kind": "type",
"source": {
"line": 524,
"line": 525,
"path": "src/plugins/types.ts"
}
},
@@ -3603,7 +3603,7 @@
"exportName": "ProviderCacheTtlEligibilityContext",
"kind": "type",
"source": {
"line": 487,
"line": 488,
"path": "src/plugins/types.ts"
}
},
@@ -3612,7 +3612,7 @@
"exportName": "ProviderCatalogContext",
"kind": "type",
"source": {
"line": 254,
"line": 255,
"path": "src/plugins/types.ts"
}
},
@@ -3621,7 +3621,7 @@
"exportName": "ProviderCatalogResult",
"kind": "type",
"source": {
"line": 277,
"line": 278,
"path": "src/plugins/types.ts"
}
},
@@ -3630,7 +3630,7 @@
"exportName": "ProviderDefaultThinkingPolicyContext",
"kind": "type",
"source": {
"line": 548,
"line": 549,
"path": "src/plugins/types.ts"
}
},
@@ -3639,7 +3639,7 @@
"exportName": "ProviderDiscoveryContext",
"kind": "type",
"source": {
"line": 587,
"line": 588,
"path": "src/plugins/types.ts"
}
},
@@ -3648,7 +3648,7 @@
"exportName": "ProviderFetchUsageSnapshotContext",
"kind": "type",
"source": {
"line": 427,
"line": 428,
"path": "src/plugins/types.ts"
}
},
@@ -3657,7 +3657,7 @@
"exportName": "ProviderModernModelPolicyContext",
"kind": "type",
"source": {
"line": 558,
"line": 559,
"path": "src/plugins/types.ts"
}
},
@@ -3666,7 +3666,7 @@
"exportName": "ProviderNormalizeResolvedModelContext",
"kind": "type",
"source": {
"line": 338,
"line": 339,
"path": "src/plugins/types.ts"
}
},
@@ -3675,7 +3675,7 @@
"exportName": "ProviderPreparedRuntimeAuth",
"kind": "type",
"source": {
"line": 374,
"line": 375,
"path": "src/plugins/types.ts"
}
},
@@ -3684,7 +3684,7 @@
"exportName": "ProviderPrepareDynamicModelContext",
"kind": "type",
"source": {
"line": 329,
"line": 330,
"path": "src/plugins/types.ts"
}
},
@@ -3693,7 +3693,7 @@
"exportName": "ProviderPrepareExtraParamsContext",
"kind": "type",
"source": {
"line": 460,
"line": 461,
"path": "src/plugins/types.ts"
}
},
@@ -3702,7 +3702,7 @@
"exportName": "ProviderPrepareRuntimeAuthContext",
"kind": "type",
"source": {
"line": 353,
"line": 354,
"path": "src/plugins/types.ts"
}
},
@@ -3711,7 +3711,7 @@
"exportName": "ProviderResolvedUsageAuth",
"kind": "type",
"source": {
"line": 414,
"line": 415,
"path": "src/plugins/types.ts"
}
},
@@ -3720,7 +3720,7 @@
"exportName": "ProviderResolveDynamicModelContext",
"kind": "type",
"source": {
"line": 312,
"line": 313,
"path": "src/plugins/types.ts"
}
},
@@ -3729,7 +3729,7 @@
"exportName": "ProviderResolveUsageAuthContext",
"kind": "type",
"source": {
"line": 395,
"line": 396,
"path": "src/plugins/types.ts"
}
},
@@ -3738,7 +3738,7 @@
"exportName": "ProviderRuntimeModel",
"kind": "type",
"source": {
"line": 295,
"line": 296,
"path": "src/plugins/types.ts"
}
},
@@ -3747,7 +3747,7 @@
"exportName": "ProviderThinkingPolicyContext",
"kind": "type",
"source": {
"line": 536,
"line": 537,
"path": "src/plugins/types.ts"
}
},
@@ -3765,7 +3765,7 @@
"exportName": "ProviderWrapStreamFnContext",
"kind": "type",
"source": {
"line": 477,
"line": 478,
"path": "src/plugins/types.ts"
}
},
@@ -3810,7 +3810,7 @@
"exportName": "SpeechProviderPlugin",
"kind": "type",
"source": {
"line": 933,
"line": 934,
"path": "src/plugins/types.ts"
}
},
@@ -3902,7 +3902,7 @@
"exportName": "MediaUnderstandingProviderPlugin",
"kind": "type",
"source": {
"line": 951,
"line": 952,
"path": "src/plugins/types.ts"
}
},
@@ -3920,7 +3920,7 @@
"exportName": "OpenClawPluginApi",
"kind": "type",
"source": {
"line": 1314,
"line": 1316,
"path": "src/plugins/types.ts"
}
},
@@ -3929,7 +3929,7 @@
"exportName": "OpenClawPluginCommandDefinition",
"kind": "type",
"source": {
"line": 1068,
"line": 1070,
"path": "src/plugins/types.ts"
}
},
@@ -3938,7 +3938,7 @@
"exportName": "OpenClawPluginConfigSchema",
"kind": "type",
"source": {
"line": 88,
"line": 89,
"path": "src/plugins/types.ts"
}
},
@@ -3947,7 +3947,7 @@
"exportName": "OpenClawPluginDefinition",
"kind": "type",
"source": {
"line": 1296,
"line": 1298,
"path": "src/plugins/types.ts"
}
},
@@ -3956,7 +3956,7 @@
"exportName": "OpenClawPluginService",
"kind": "type",
"source": {
"line": 1285,
"line": 1287,
"path": "src/plugins/types.ts"
}
},
@@ -3965,7 +3965,7 @@
"exportName": "OpenClawPluginServiceContext",
"kind": "type",
"source": {
"line": 1277,
"line": 1279,
"path": "src/plugins/types.ts"
}
},
@@ -3974,7 +3974,7 @@
"exportName": "PluginCommandContext",
"kind": "type",
"source": {
"line": 966,
"line": 968,
"path": "src/plugins/types.ts"
}
},
@@ -3983,7 +3983,7 @@
"exportName": "PluginInteractiveTelegramHandlerContext",
"kind": "type",
"source": {
"line": 1097,
"line": 1099,
"path": "src/plugins/types.ts"
}
},
@@ -3992,7 +3992,7 @@
"exportName": "PluginLogger",
"kind": "type",
"source": {
"line": 59,
"line": 60,
"path": "src/plugins/types.ts"
}
},
@@ -4001,7 +4001,7 @@
"exportName": "ProviderAugmentModelCatalogContext",
"kind": "type",
"source": {
"line": 571,
"line": 572,
"path": "src/plugins/types.ts"
}
},
@@ -4010,7 +4010,7 @@
"exportName": "ProviderAuthContext",
"kind": "type",
"source": {
"line": 155,
"line": 156,
"path": "src/plugins/types.ts"
}
},
@@ -4019,7 +4019,7 @@
"exportName": "ProviderAuthDoctorHintContext",
"kind": "type",
"source": {
"line": 446,
"line": 447,
"path": "src/plugins/types.ts"
}
},
@@ -4028,7 +4028,7 @@
"exportName": "ProviderAuthMethod",
"kind": "type",
"source": {
"line": 233,
"line": 234,
"path": "src/plugins/types.ts"
}
},
@@ -4037,7 +4037,7 @@
"exportName": "ProviderAuthMethodNonInteractiveContext",
"kind": "type",
"source": {
"line": 217,
"line": 218,
"path": "src/plugins/types.ts"
}
},
@@ -4046,7 +4046,7 @@
"exportName": "ProviderAuthResult",
"kind": "type",
"source": {
"line": 140,
"line": 141,
"path": "src/plugins/types.ts"
}
},
@@ -4055,7 +4055,7 @@
"exportName": "ProviderBuildMissingAuthMessageContext",
"kind": "type",
"source": {
"line": 499,
"line": 500,
"path": "src/plugins/types.ts"
}
},
@@ -4064,7 +4064,7 @@
"exportName": "ProviderBuiltInModelSuppressionContext",
"kind": "type",
"source": {
"line": 515,
"line": 516,
"path": "src/plugins/types.ts"
}
},
@@ -4073,7 +4073,7 @@
"exportName": "ProviderBuiltInModelSuppressionResult",
"kind": "type",
"source": {
"line": 524,
"line": 525,
"path": "src/plugins/types.ts"
}
},
@@ -4082,7 +4082,7 @@
"exportName": "ProviderCacheTtlEligibilityContext",
"kind": "type",
"source": {
"line": 487,
"line": 488,
"path": "src/plugins/types.ts"
}
},
@@ -4091,7 +4091,7 @@
"exportName": "ProviderCatalogContext",
"kind": "type",
"source": {
"line": 254,
"line": 255,
"path": "src/plugins/types.ts"
}
},
@@ -4100,7 +4100,7 @@
"exportName": "ProviderCatalogResult",
"kind": "type",
"source": {
"line": 277,
"line": 278,
"path": "src/plugins/types.ts"
}
},
@@ -4109,7 +4109,7 @@
"exportName": "ProviderDefaultThinkingPolicyContext",
"kind": "type",
"source": {
"line": 548,
"line": 549,
"path": "src/plugins/types.ts"
}
},
@@ -4118,7 +4118,7 @@
"exportName": "ProviderDiscoveryContext",
"kind": "type",
"source": {
"line": 587,
"line": 588,
"path": "src/plugins/types.ts"
}
},
@@ -4127,7 +4127,7 @@
"exportName": "ProviderFetchUsageSnapshotContext",
"kind": "type",
"source": {
"line": 427,
"line": 428,
"path": "src/plugins/types.ts"
}
},
@@ -4136,7 +4136,7 @@
"exportName": "ProviderModernModelPolicyContext",
"kind": "type",
"source": {
"line": 558,
"line": 559,
"path": "src/plugins/types.ts"
}
},
@@ -4145,7 +4145,7 @@
"exportName": "ProviderNormalizeResolvedModelContext",
"kind": "type",
"source": {
"line": 338,
"line": 339,
"path": "src/plugins/types.ts"
}
},
@@ -4154,7 +4154,7 @@
"exportName": "ProviderPreparedRuntimeAuth",
"kind": "type",
"source": {
"line": 374,
"line": 375,
"path": "src/plugins/types.ts"
}
},
@@ -4163,7 +4163,7 @@
"exportName": "ProviderPrepareDynamicModelContext",
"kind": "type",
"source": {
"line": 329,
"line": 330,
"path": "src/plugins/types.ts"
}
},
@@ -4172,7 +4172,7 @@
"exportName": "ProviderPrepareExtraParamsContext",
"kind": "type",
"source": {
"line": 460,
"line": 461,
"path": "src/plugins/types.ts"
}
},
@@ -4181,7 +4181,7 @@
"exportName": "ProviderPrepareRuntimeAuthContext",
"kind": "type",
"source": {
"line": 353,
"line": 354,
"path": "src/plugins/types.ts"
}
},
@@ -4190,7 +4190,7 @@
"exportName": "ProviderResolvedUsageAuth",
"kind": "type",
"source": {
"line": 414,
"line": 415,
"path": "src/plugins/types.ts"
}
},
@@ -4199,7 +4199,7 @@
"exportName": "ProviderResolveDynamicModelContext",
"kind": "type",
"source": {
"line": 312,
"line": 313,
"path": "src/plugins/types.ts"
}
},
@@ -4208,7 +4208,7 @@
"exportName": "ProviderResolveUsageAuthContext",
"kind": "type",
"source": {
"line": 395,
"line": 396,
"path": "src/plugins/types.ts"
}
},
@@ -4217,7 +4217,7 @@
"exportName": "ProviderRuntimeModel",
"kind": "type",
"source": {
"line": 295,
"line": 296,
"path": "src/plugins/types.ts"
}
},
@@ -4226,7 +4226,7 @@
"exportName": "ProviderThinkingPolicyContext",
"kind": "type",
"source": {
"line": 536,
"line": 537,
"path": "src/plugins/types.ts"
}
},
@@ -4235,7 +4235,7 @@
"exportName": "ProviderWrapStreamFnContext",
"kind": "type",
"source": {
"line": 477,
"line": 478,
"path": "src/plugins/types.ts"
}
},
@@ -4244,7 +4244,7 @@
"exportName": "SpeechProviderPlugin",
"kind": "type",
"source": {
"line": 933,
"line": 934,
"path": "src/plugins/types.ts"
}
}