Skip to content

Commit 5790435

Browse files
committed
feat(agents): add video_generate tool
1 parent b5e87be commit 5790435

26 files changed

Lines changed: 1249 additions & 35 deletions

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ Docs: https://docs.openclaw.ai
191191
- Update/npm: prefer the npm binary that owns the installed global OpenClaw prefix so mixed Homebrew-plus-nvm setups update the right install. (#60153) Thanks @jayeshp19.
192192
- Windows/restart: clean up stale gateway listeners before Windows self-restart and treat listener and argv probe failures as inconclusive, so scheduled-task relaunch no longer falls into an `EADDRINUSE` retry loop. (#60480) Thanks @arifahmedjoy.
193193
- Plugins: suppress trust-warning noise during non-activating snapshot and CLI metadata loads. (#61427) Thanks @gumadeiras.
194+
- Agents/video generation: accept `agents.defaults.videoGenerationModel` in strict config validation and `openclaw config set/get`, so gateways using `video_generate` no longer fail to boot after enabling a video model.
194195

195196
## 2026.4.2
196197

apps/shared/OpenClawKit/Sources/OpenClawKit/Resources/tool-display.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1030,6 +1030,31 @@
10301030
}
10311031
}
10321032
},
1033+
"video_generate": {
1034+
"emoji": "🎬",
1035+
"title": "Video Generation",
1036+
"actions": {
1037+
"generate": {
1038+
"label": "generate",
1039+
"detailKeys": [
1040+
"prompt",
1041+
"model",
1042+
"durationSeconds",
1043+
"resolution",
1044+
"aspectRatio",
1045+
"audio",
1046+
"watermark"
1047+
]
1048+
},
1049+
"list": {
1050+
"label": "list",
1051+
"detailKeys": [
1052+
"provider",
1053+
"model"
1054+
]
1055+
}
1056+
}
1057+
},
10331058
"pdf": {
10341059
"emoji": "📑",
10351060
"title": "PDF",

docs/concepts/models.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ Related:
3030
falls back to `agents.defaults.imageModel`, then the resolved session/default
3131
model.
3232
- `agents.defaults.imageGenerationModel` is used by the shared image-generation capability. If omitted, `image_generate` can still infer an auth-backed provider default. It tries the current default provider first, then the remaining registered image-generation providers in provider-id order. If you set a specific provider/model, also configure that provider's auth/API key.
33-
- `agents.defaults.videoGenerationModel` is used by the shared video-generation capability. Unlike image generation, this does not infer a provider default today. Set an explicit `provider/model` such as `qwen/wan2.6-t2v`, and configure that provider's auth/API key too.
33+
- `agents.defaults.videoGenerationModel` is used by the shared video-generation capability. If omitted, `video_generate` can still infer an auth-backed provider default. It tries the current default provider first, then the remaining registered video-generation providers in provider-id order. If you set a specific provider/model, also configure that provider's auth/API key.
3434
- Per-agent defaults can override `agents.defaults.model` via `agents.list[].model` plus bindings (see [/concepts/multi-agent](/concepts/multi-agent)).
3535

3636
## Quick model policy
@@ -252,4 +252,5 @@ This applies whenever OpenClaw regenerates `models.json`, including command-driv
252252
- [Model Providers](/concepts/model-providers) — provider routing and auth
253253
- [Model Failover](/concepts/model-failover) — fallback chains
254254
- [Image Generation](/tools/image-generation) — image model configuration
255+
- [Video Generation](/tools/video-generation) — video model configuration
255256
- [Configuration Reference](/gateway/configuration-reference#agent-defaults) — model config keys

docs/gateway/configuration-reference.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1026,9 +1026,9 @@ Time format in system prompt. Default: `auto` (OS preference).
10261026
- If you select a provider/model directly, configure the matching provider auth/API key too (for example `GEMINI_API_KEY` or `GOOGLE_API_KEY` for `google/*`, `OPENAI_API_KEY` for `openai/*`, `FAL_KEY` for `fal/*`).
10271027
- If omitted, `image_generate` can still infer an auth-backed provider default. It tries the current default provider first, then the remaining registered image-generation providers in provider-id order.
10281028
- `videoGenerationModel`: accepts either a string (`"provider/model"`) or an object (`{ primary, fallbacks }`).
1029-
- Used by the shared video-generation capability.
1029+
- Used by the shared video-generation capability and the built-in `video_generate` tool.
10301030
- Typical values: `qwen/wan2.6-t2v`, `qwen/wan2.6-i2v`, `qwen/wan2.6-r2v`, `qwen/wan2.6-r2v-flash`, or `qwen/wan2.7-r2v`.
1031-
- Set this explicitly before using shared video generation. Unlike `imageGenerationModel`, the video-generation runtime does not infer a provider default yet.
1031+
- If omitted, `video_generate` can still infer an auth-backed provider default. It tries the current default provider first, then the remaining registered video-generation providers in provider-id order.
10321032
- If you select a provider/model directly, configure the matching provider auth/API key too.
10331033
- The bundled Qwen video-generation provider currently supports up to 1 output video, 1 input image, 4 input videos, 10 seconds duration, and provider-level `size`, `aspectRatio`, `resolution`, `audio`, and `watermark` options.
10341034
- `pdfModel`: accepts either a string (`"provider/model"`) or an object (`{ primary, fallbacks }`).
@@ -1936,12 +1936,12 @@ Defaults for Talk mode (macOS/iOS/Android).
19361936

19371937
Local onboarding defaults new local configs to `tools.profile: "coding"` when unset (existing explicit profiles are preserved).
19381938

1939-
| Profile | Includes |
1940-
| ----------- | ------------------------------------------------------------------------------------------------------------- |
1941-
| `minimal` | `session_status` only |
1942-
| `coding` | `group:fs`, `group:runtime`, `group:web`, `group:sessions`, `group:memory`, `cron`, `image`, `image_generate` |
1943-
| `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` |
1944-
| `full` | No restriction (same as unset) |
1939+
| Profile | Includes |
1940+
| ----------- | ------------------------------------------------------------------------------------------------------------------------------- |
1941+
| `minimal` | `session_status` only |
1942+
| `coding` | `group:fs`, `group:runtime`, `group:web`, `group:sessions`, `group:memory`, `cron`, `image`, `image_generate`, `video_generate` |
1943+
| `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` |
1944+
| `full` | No restriction (same as unset) |
19451945

19461946
### Tool groups
19471947

@@ -1957,7 +1957,7 @@ Local onboarding defaults new local configs to `tools.profile: "coding"` when un
19571957
| `group:messaging` | `message` |
19581958
| `group:nodes` | `nodes` |
19591959
| `group:agents` | `agents_list` |
1960-
| `group:media` | `image`, `image_generate`, `tts` |
1960+
| `group:media` | `image`, `image_generate`, `video_generate`, `tts` |
19611961
| `group:openclaw` | All built-in tools (excludes provider plugins) |
19621962

19631963
### `tools.allow` / `tools.deny`

docs/gateway/sandbox-vs-tool-policy-vs-elevated.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ Available groups:
9898
- `group:messaging`: `message`
9999
- `group:nodes`: `nodes`
100100
- `group:agents`: `agents_list`
101-
- `group:media`: `image`, `image_generate`, `tts`
101+
- `group:media`: `image`, `image_generate`, `video_generate`, `tts`
102102
- `group:openclaw`: all built-in OpenClaw tools (excludes provider plugins)
103103

104104
## Elevated: exec-only "run on host"

docs/providers/qwen.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ Current bundled Qwen video-generation limits:
123123
- Up to **4** input videos
124124
- Up to **10 seconds** duration
125125
- Supports `size`, `aspectRatio`, `resolution`, `audio`, and `watermark`
126+
- Reference image/video mode currently requires **remote http(s) URLs**. Local
127+
file paths are rejected up front because the DashScope video endpoint does not
128+
accept uploaded local buffers for those references.
126129

127130
See [Qwen / Model Studio](/providers/qwen_modelstudio) for endpoint-level detail
128131
and compatibility notes.

docs/tools/index.md

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -53,25 +53,28 @@ OpenClaw has three layers that work together:
5353

5454
These tools ship with OpenClaw and are available without installing any plugins:
5555

56-
| Tool | What it does | Page |
57-
| ------------------------------------------ | --------------------------------------------------------------------- | --------------------------------------- |
58-
| `exec` / `process` | Run shell commands, manage background processes | [Exec](/tools/exec) |
59-
| `code_execution` | Run sandboxed remote Python analysis | [Code Execution](/tools/code-execution) |
60-
| `browser` | Control a Chromium browser (navigate, click, screenshot) | [Browser](/tools/browser) |
61-
| `web_search` / `x_search` / `web_fetch` | Search the web, search X posts, fetch page content | [Web](/tools/web) |
62-
| `read` / `write` / `edit` | File I/O in the workspace | |
63-
| `apply_patch` | Multi-hunk file patches | [Apply Patch](/tools/apply-patch) |
64-
| `message` | Send messages across all channels | [Agent Send](/tools/agent-send) |
65-
| `canvas` | Drive node Canvas (present, eval, snapshot) | |
66-
| `nodes` | Discover and target paired devices | |
67-
| `cron` / `gateway` | Manage scheduled jobs; inspect, patch, restart, or update the gateway | |
68-
| `image` / `image_generate` | Analyze or generate images | |
69-
| `tts` | One-shot text-to-speech conversion | [TTS](/tools/tts) |
70-
| `sessions_*` / `subagents` / `agents_list` | Session management, status, and sub-agent orchestration | [Sub-agents](/tools/subagents) |
71-
| `session_status` | Lightweight `/status`-style readback and session model override | [Session Tools](/concepts/session-tool) |
56+
| Tool | What it does | Page |
57+
| ------------------------------------------ | --------------------------------------------------------------------- | ------------------------------------------- |
58+
| `exec` / `process` | Run shell commands, manage background processes | [Exec](/tools/exec) |
59+
| `code_execution` | Run sandboxed remote Python analysis | [Code Execution](/tools/code-execution) |
60+
| `browser` | Control a Chromium browser (navigate, click, screenshot) | [Browser](/tools/browser) |
61+
| `web_search` / `x_search` / `web_fetch` | Search the web, search X posts, fetch page content | [Web](/tools/web) |
62+
| `read` / `write` / `edit` | File I/O in the workspace | |
63+
| `apply_patch` | Multi-hunk file patches | [Apply Patch](/tools/apply-patch) |
64+
| `message` | Send messages across all channels | [Agent Send](/tools/agent-send) |
65+
| `canvas` | Drive node Canvas (present, eval, snapshot) | |
66+
| `nodes` | Discover and target paired devices | |
67+
| `cron` / `gateway` | Manage scheduled jobs; inspect, patch, restart, or update the gateway | |
68+
| `image` / `image_generate` | Analyze or generate images | [Image Generation](/tools/image-generation) |
69+
| `video_generate` | Generate videos | [Video Generation](/tools/video-generation) |
70+
| `tts` | One-shot text-to-speech conversion | [TTS](/tools/tts) |
71+
| `sessions_*` / `subagents` / `agents_list` | Session management, status, and sub-agent orchestration | [Sub-agents](/tools/subagents) |
72+
| `session_status` | Lightweight `/status`-style readback and session model override | [Session Tools](/concepts/session-tool) |
7273

7374
For image work, use `image` for analysis and `image_generate` for generation or editing. If you target `openai/*`, `google/*`, `fal/*`, or another non-default image provider, configure that provider's auth/API key first.
7475

76+
For video work, use `video_generate`. If you target `qwen/*` or another non-default video provider, configure that provider's auth/API key first.
77+
7578
`session_status` is the lightweight status/readback tool in the sessions group.
7679
It answers `/status`-style questions about the current session and can
7780
optionally set a per-session model override; `model=default` clears that
@@ -121,12 +124,12 @@ config. Deny always wins over allow.
121124
`tools.profile` sets a base allowlist before `allow`/`deny` is applied.
122125
Per-agent override: `agents.list[].tools.profile`.
123126

124-
| Profile | What it includes |
125-
| ----------- | ------------------------------------------------------------------------------------------------------------- |
126-
| `full` | No restriction (same as unset) |
127-
| `coding` | `group:fs`, `group:runtime`, `group:web`, `group:sessions`, `group:memory`, `cron`, `image`, `image_generate` |
128-
| `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` |
129-
| `minimal` | `session_status` only |
127+
| Profile | What it includes |
128+
| ----------- | ------------------------------------------------------------------------------------------------------------------------------- |
129+
| `full` | No restriction (same as unset) |
130+
| `coding` | `group:fs`, `group:runtime`, `group:web`, `group:sessions`, `group:memory`, `cron`, `image`, `image_generate`, `video_generate` |
131+
| `messaging` | `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status` |
132+
| `minimal` | `session_status` only |
130133

131134
### Tool groups
132135

@@ -144,7 +147,7 @@ Use `group:*` shorthands in allow/deny lists:
144147
| `group:messaging` | message |
145148
| `group:nodes` | nodes |
146149
| `group:agents` | agents_list |
147-
| `group:media` | image, image_generate, tts |
150+
| `group:media` | image, image_generate, video_generate, tts |
148151
| `group:openclaw` | All built-in OpenClaw tools (excludes plugin tools) |
149152

150153
`sessions_history` returns a bounded, safety-filtered recall view. It strips

0 commit comments

Comments
 (0)