The
video_generate tool only appears when at least one video-generation provider is available. If you do not see it in your agent tools, set a provider API key or configure agents.defaults.videoGenerationModel.generatefor text-to-video requests with no reference mediaimageToVideowhen the request includes one or more reference imagesvideoToVideowhen the request includes one or more reference videos
action=list.
Quick start
- Set an API key for any supported provider:
- Optionally pin a default model:
- Ask the agent:
Generate a 5-second cinematic video of a friendly puppy surfing at sunset.The agent calls
video_generate automatically. No tool allowlisting is needed.
What happens when you generate a video
Video generation is asynchronous. When the agent callsvideo_generate in a session:
- FluffBuzz submits the request to the provider and immediately returns a task ID.
- The provider processes the job in the background (typically 30 seconds to 5 minutes depending on the provider and resolution).
- When the video is ready, FluffBuzz wakes the same session with an internal completion event.
- The agent posts the finished video back into the original conversation.
video_generate calls in the same session return the current task status instead of starting another generation. Use fluffbuzz tasks list or fluffbuzz tasks show <taskId> to check progress from the CLI.
Outside of session-backed agent runs (for example, direct tool invocations), the tool falls back to inline generation and returns the final media path in the same turn.
Task lifecycle
Eachvideo_generate request moves through four states:
- queued — task created, waiting for the provider to accept it.
- running — provider is processing (typically 30 seconds to 5 minutes depending on provider and resolution).
- succeeded — video ready; the agent wakes and posts it to the conversation.
- failed — provider error or timeout; the agent wakes with error details.
queued or running for the current session, video_generate returns the existing task status instead of starting a new one. Use action: "status" to check explicitly without triggering a new generation.
Supported providers
Some providers accept additional or alternate API key env vars. See individual provider pages for details.
Run
video_generate action=list to inspect available providers, models, and
runtime modes at runtime.
Declared capability matrix
This is the explicit mode contract used byvideo_generate, contract tests,
and the shared live sweep.
Tool parameters
Required
Content inputs
Role hints are forwarded to the provider as-is. Canonical values come from
the
VideoGenerationAssetRole union but providers may accept additional
role strings. *Roles arrays must not have more entries than the
corresponding reference list; off-by-one mistakes fail with a clear error.
Use an empty string to leave a slot unset.
Style controls
adaptive is a provider-specific sentinel: it is forwarded as-is to
providers that declare adaptive in their capabilities (e.g. BytePlus
Seedance uses it to auto-detect the ratio from the input image
dimensions). Providers that do not declare it surface the value via
details.ignoredOverrides in the tool result so the drop is visible.
Advanced
Not all providers support all parameters. FluffBuzz already normalizes duration to the closest provider-supported value, and it also remaps translated geometry hints such as size-to-aspect-ratio when a fallback provider exposes a different control surface. Truly unsupported overrides are ignored on a best-effort basis and reported as warnings in the tool result. Hard capability limits (such as too many reference inputs) fail before submission.
Tool results report the applied settings. When FluffBuzz remaps duration or geometry during provider fallback, the returned
durationSeconds, size, aspectRatio, and resolution values reflect what was submitted, and details.normalization captures the requested-to-applied translation.
Reference inputs also select the runtime mode:
- No reference media:
generate - Any image reference:
imageToVideo - Any video reference:
videoToVideo - Reference audio inputs do not change the resolved mode; they apply on top of whatever mode the image/video references select, and only work with providers that declare
maxInputAudios
Fallback and typed options
Some capability checks are applied at the fallback layer rather than the tool boundary so that a request that exceeds the primary provider’s limits can still run on a capable fallback:- If the active candidate declares no
maxInputAudios(or declares it as0), it is skipped when the request contains audio references, and the next candidate is tried. - If the active candidate’s
maxDurationSecondsis below the requesteddurationSecondsand the candidate does not declare asupportedDurationSecondslist, it is skipped. - If the request contains
providerOptionsand the active candidate explicitly declares a typedproviderOptionsschema, the candidate is skipped when the supplied keys are not in the schema or the value types do not match. Providers that have not yet declared a schema receive the options as-is (backward-compatible pass-through). A provider can explicitly opt out of all provider options by declaring an empty schema (capabilities.providerOptions: {}), which causes the same skip as a type mismatch.
warn so operators see
when their primary provider was passed over; subsequent skips log at
debug to keep long fallback chains quiet. If every candidate is skipped,
the aggregated error includes the skip reason for each.
Actions
- generate (default) — create a video from the given prompt and optional reference inputs.
- status — check the state of the in-flight video task for the current session without starting another generation.
- list — show available providers, models, and their capabilities.
Model selection
When generating a video, FluffBuzz resolves the model in this order:modeltool parameter — if the agent specifies one in the call.videoGenerationModel.primary— from config.videoGenerationModel.fallbacks— tried in order.- Auto-detection — uses providers that have valid auth, starting with the current default provider, then remaining providers in alphabetical order.
agents.defaults.mediaGenerationAutoProviderFallback: false if you want
video generation to use only the explicit model, primary, and fallbacks
entries.
Provider notes
Provider capability modes
The shared video-generation contract now lets providers declare mode-specific capabilities instead of only flat aggregate limits. New provider implementations should prefer explicit mode blocks:maxInputImages and maxInputVideos are not
enough to advertise transform-mode support. Providers should declare
generate, imageToVideo, and videoToVideo explicitly so live tests,
contract tests, and the shared video_generate tool can validate mode support
deterministically.
Live tests
Opt-in live coverage for the shared bundled providers:~/.profile, prefers
live/env API keys ahead of stored auth profiles by default, and runs a
release-safe smoke by default:
generatefor every non-FAL provider in the sweep- one-second puppy prompt
- per-provider operation cap from
FLUFFBUZZ_LIVE_VIDEO_GENERATION_TIMEOUT_MS(180000by default)
FLUFFBUZZ_LIVE_VIDEO_GENERATION_FULL_MODES=1 to also run declared transform
modes the shared sweep can exercise safely with local media:
imageToVideowhencapabilities.imageToVideo.enabledvideoToVideowhencapabilities.videoToVideo.enabledand the provider/model accepts buffer-backed local video input in the shared sweep
videoToVideo live lane covers:
runwayonly when you selectrunway/gen4_aleph
Configuration
Set the default video generation model in your FluffBuzz config:Related
- Tools Overview
- Background Tasks — task tracking for async video generation
- Alibaba Model Studio
- BytePlus
- ComfyUI
- fal
- Google (Gemini)
- MiniMax
- OpenAI
- Qwen
- Runway
- Together AI
- Vydra
- xAI
- Configuration Reference
- Models