Skip to content

Video Generation API

The video generation module provides functions for creating videos from various inputs using Google's Veo models.

Functions

generate_from_text

veotools.generate.video.generate_from_text

generate_from_text(prompt: str, model: str = 'veo-3.0-fast-generate-preview', duration_seconds: Optional[int] = None, on_progress: Optional[Callable] = None, **kwargs) -> VideoResult

Generate a video from a text prompt.

Automatically selects the active video provider (Google GenAI or Daydreams Router) based on configuration. Falls back to Google behaviour when no provider override is specified.

Source code in src\veotools\generate\video.py
def generate_from_text(
    prompt: str,
    model: str = "veo-3.0-fast-generate-preview",
    duration_seconds: Optional[int] = None,
    on_progress: Optional[Callable] = None,
    **kwargs,
) -> VideoResult:
    """Generate a video from a text prompt.

    Automatically selects the active video provider (Google GenAI or Daydreams Router)
    based on configuration. Falls back to Google behaviour when no provider override
    is specified.
    """

    veo_client = VeoClient()
    if veo_client.provider == "daydreams":
        return _generate_from_text_daydreams(
            veo_client.client,
            prompt,
            model=model,
            duration_seconds=duration_seconds,
            on_progress=on_progress,
            **kwargs,
        )

    return _generate_from_text_google(
        veo_client.client,
        prompt,
        model=model,
        duration_seconds=duration_seconds,
        on_progress=on_progress,
        **kwargs,
    )

generate_from_image

veotools.generate.video.generate_from_image

generate_from_image(image_path: Path, prompt: str, model: str = 'veo-3.0-fast-generate-preview', on_progress: Optional[Callable] = None, **kwargs) -> VideoResult

Generate a video from an image seed.

Source code in src\veotools\generate\video.py
def generate_from_image(
    image_path: Path,
    prompt: str,
    model: str = "veo-3.0-fast-generate-preview",
    on_progress: Optional[Callable] = None,
    **kwargs,
) -> VideoResult:
    """Generate a video from an image seed."""

    veo_client = VeoClient()
    if veo_client.provider == "daydreams":
        raise NotImplementedError(
            "Daydreams Router provider does not currently support image-to-video generation in veotools"
        )

    return _generate_from_image_google(
        veo_client.client,
        image_path,
        prompt,
        model=model,
        on_progress=on_progress,
        **kwargs,
    )

generate_from_video

veotools.generate.video.generate_from_video

generate_from_video(video_path: Path, prompt: str, extract_at: float = -1.0, model: str = 'veo-3.0-fast-generate-preview', on_progress: Optional[Callable] = None, **kwargs) -> VideoResult

Generate a video continuation from an existing clip.

Source code in src\veotools\generate\video.py
def generate_from_video(
    video_path: Path,
    prompt: str,
    extract_at: float = -1.0,
    model: str = "veo-3.0-fast-generate-preview",
    on_progress: Optional[Callable] = None,
    **kwargs,
) -> VideoResult:
    """Generate a video continuation from an existing clip."""

    veo_client = VeoClient()
    if veo_client.provider == "daydreams":
        raise NotImplementedError(
            "Daydreams Router provider does not currently support video-seeded continuation in veotools"
        )

    return _generate_from_video_google(
        veo_client.client,
        video_path,
        prompt,
        extract_at=extract_at,
        model=model,
        on_progress=on_progress,
        **kwargs,
    )

Examples

Text to Video

import veotools as veo

veo.init()

# Basic generation
result = veo.generate_from_text(
    prompt="A cat playing piano",
    model="veo-3.0-fast-generate-preview"
)

# With progress tracking
def on_progress(message: str, percent: int):
    print(f"{message}: {percent}%")

result = veo.generate_from_text(
    prompt="Sunset over mountains",
    model="veo-3.0-fast-generate-preview",
    on_progress=on_progress
)

Image to Video

# Generate video from an image
result = veo.generate_from_image(
    image_path="landscape.jpg",
    prompt="The landscape comes to life with moving clouds",
    model="veo-3.0-fast-generate-preview"
)

Video Continuation

# Continue from existing video
result = veo.generate_from_video(
    video_path="intro.mp4",
    prompt="The scene transitions to a forest",
    extract_at=-1.0,  # Use last frame
    model="veo-3.0-fast-generate-preview"
)

Model Support

Different Veo models support different features:

Model Duration Control Aspect Ratio Audio Generation Time
veo-3.0-fast-generate-preview ✅ (16:9) ~1 min
veo-3.0-generate-preview ✅ (16:9) ~2 min
veo-2.0-generate-001 ✅ (16:9, 9:16) ~3 min

Safety Settings

You can pass safety settings to control content generation:

from google.genai import types

safety_settings = [
    types.SafetySetting(
        category="HARM_CATEGORY_HARASSMENT",
        threshold="BLOCK_ONLY_HIGH"
    )
]

result = veo.generate_from_text(
    prompt="A friendly conversation",
    safety_settings=safety_settings
)