
Veo Build
- 93 installs
- 124 repo stars
- Updated February 6, 2026
- cnemri/google-genai-skills
Guides creating and editing videos with Google's Veo 2 and Veo 3 models via the google-genai SDK: text-to-video, image-to-video, inpainting, and advanced controls.
About
Provides workflows for video generation and editing using Veo 2/3 through the google-genai Python SDK on Vertex AI. A developer uses it to build text-to-video, image-to-video, or inpainting features.
- Text-to-video and image-to-video with Veo 3
- Veo 2 inpainting plus frame interpolation and video extension
Veo Build by the numbers
- 93 all-time installs (skills.sh)
- Ranked #799 of 1,335 Generative Media skills by installs in the Skillselion catalog
- Data as of Jul 29, 2026 (Skillselion catalog sync)
npx skills add https://github.com/cnemri/google-genai-skills --skill veo-buildAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 93 |
|---|---|
| repo stars | ★ 124 |
| Last updated | February 6, 2026 |
| Repository | cnemri/google-genai-skills ↗ |
What it does
Guides creating and editing videos with Google's Veo 2 and Veo 3 models via the google-genai SDK: text-to-video, image-to-video, inpainting, and advanced controls.
Files
Veo Video Generation and Editing
This skill provides comprehensive workflows for using Google's Veo models (Veo 2 and Veo 3) via the google-genai Python SDK.
Quick Start Setup
All Veo operations require the google-genai library and an authenticated client with Vertex AI enabled.
from google import genai
from google.genai import types
import os
PROJECT_ID = os.environ.get("GOOGLE_CLOUD_PROJECT")
LOCATION = os.environ.get("GOOGLE_CLOUD_REGION", "us-central1")
client = genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION)Reference Materials
- [Generation (Veo 3)](references/generation.md): Text-to-Video, Image-to-Video.
- [Editing (Veo 2)](references/editing.md): Inpainting, Masking.
- [Advanced Controls](references/advanced.md): Frame Interpolation, Video Extension, Reference Images.
- [Prompting Guide](references/prompting.md): Camera angles, visual styles, and best practices.
- [Source Code](references/source_code.md): Deep inspection of SDK internals (
models.py,types.py).
Available Workflows
1. Video Generation (Veo 3)
Create new videos from text or image prompts.
- Text-to-Video: Create videos from detailed text descriptions.
- Image-to-Video: Animate static images.
- Prompt Engineering: Optimization keywords for camera, lighting, and style.
2. Video Editing (Veo 2)
Modify existing videos using masks (Inpainting).
- Remove Objects: Erase dynamic or static objects.
- Insert Objects: Add new elements into a scene.
3. Advanced Controls (Veo 3)
Specialized generation tasks for precise control.
- Frame Interpolation: Generate video bridging two images (first & last frame).
- Video Extension: Extend the duration of an existing video clip.
- Reference-to-Video: Use specific asset images (subjects, products) to guide generation.
Veo 3 Advanced Controls
This guide covers advanced generation techniques: Frame Interpolation, Video Extension, and using Asset Reference Images.
Frame Interpolation
Generates video content that bridges a first_frame and a last_frame. Useful for creating transitions or animating between two states.
from google import genai
from google.genai import types
client = genai.Client(vertexai=True, project="YOUR_PROJECT", location="us-central1")
operation = client.models.generate_videos(
model="veo-3.1-generate-001",
prompt="a hand reaches in and places a glass of milk", # Optional guidance
image=types.Image.from_file(location="cookies.png"), # First frame
config=types.GenerateVideosConfig(
last_frame=types.Image.from_file(location="cookies-milk.png"), # Last frame
duration_seconds=8, # Duration of the generated bridge
aspect_ratio="16:9",
generate_audio=True,
),
)Video Extension
Extends an existing video clip in time. Requires veo-3.1-generate-preview.
operation = client.models.generate_videos(
model="veo-3.1-generate-preview",
prompt="a butterfly flies in and lands on the flower", # Describes the *new* content
video=types.Video(uri="gs://bucket/short_clip.mp4", mime_type="video/mp4"),
config=types.GenerateVideosConfig(
duration_seconds=7, # How many seconds to ADD to the video
output_gcs_uri="gs://bucket/extended_clip.mp4",
generate_audio=True,
),
)Reference-to-Video (Asset Images)
Use up to 3 specific reference images ("assets") to guide the generation. This helps preserve the identity of subjects, objects, or scenes across the video.
Asset Types
- Subject: A person or character.
- Object: A product or item.
- Scene: A background or environment.
Code Example
# Load images from GCS or local files
ref_image_1 = types.VideoGenerationReferenceImage(
image=types.Image.from_file(location="man.png"),
reference_type="asset",
)
ref_image_2 = types.VideoGenerationReferenceImage(
image=types.Image.from_file(location="woman.png"),
reference_type="asset",
)
operation = client.models.generate_videos(
model="veo-3.1-generate-preview", # or veo-3.1-fast-generate-preview
prompt="a woman and a man drinking a cup of coffee in a cafe",
config=types.GenerateVideosConfig(
reference_images=[ref_image_1, ref_image_2], # List of up to 3 references
aspect_ratio="16:9",
duration_seconds=8,
person_generation="allow_adult",
generate_audio=True,
),
)Veo 2 Video Editing
This guide covers video editing tasks (inpainting) using the Veo 2 model. These operations require a source video and a mask image.
Model
veo-2.0-generate-preview
Concepts
- Inpainting: Modifying a specific region of a video defined by a mask.
- Mask: An image where white pixels (255) represent the area to edit, and black pixels (0) represent the area to keep.
- Modes:
REMOVE: Dynamic inpainting. Removes an object selected in the first frame mask throughout the video.REMOVE_STATIC: Static inpainting. Applies the mask to every frame (good for watermarks or fixed camera obstructions).INSERT: Adds new content into the masked area based on a prompt.
Remove Object (Dynamic)
Removes an object identified by the mask in the first frame.
from google import genai
from google.genai import types
client = genai.Client(vertexai=True, project="YOUR_PROJECT", location="us-central1")
operation = client.models.generate_videos(
model="veo-2.0-generate-preview",
source=types.GenerateVideosSource(
video=types.Video(uri="gs://bucket/source_video.mp4", mime_type="video/mp4")
),
config=types.GenerateVideosConfig(
mask=types.VideoGenerationMask(
image=types.Image.from_file(location="mask.png"),
mask_mode=types.VideoGenerationMaskMode.REMOVE,
),
enhance_prompt=True, # Recommended
),
)Remove Static Object
Removes a static element (like a logo) that is in the same place in every frame.
config=types.GenerateVideosConfig(
mask=types.VideoGenerationMask(
image=types.Image.from_file(location="static_mask.png"),
mask_mode=types.VideoGenerationMaskMode.REMOVE_STATIC,
),
# Optional prompt to guide what replaces the background
# prompt="a mountain landscape",
)Insert Object
Inserts a new object into the masked area defined by the prompt.
operation = client.models.generate_videos(
model="veo-2.0-generate-preview",
source=types.GenerateVideosSource(
prompt="a sheep", # The object to insert
video=types.Video(uri="gs://bucket/truck.mp4", mime_type="video/mp4")
),
config=types.GenerateVideosConfig(
mask=types.VideoGenerationMask(
image=types.Image.from_file(location="mask.png"),
mask_mode=types.VideoGenerationMaskMode.INSERT,
),
output_gcs_uri="gs://bucket/output_with_sheep.mp4",
enhance_prompt=True,
),
)Veo 3 Video Generation
This guide covers creating videos from scratch using Text-to-Video and Image-to-Video with the Google Gen AI SDK.
Models
veo-3.1-generate-001: High quality, standard latency.veo-3.1-fast-generate-001: Lower latency, optimized for speed.
Text-to-Video
Generate a video purely from a text prompt.
from google import genai
from google.genai import types
client = genai.Client(vertexai=True, project="YOUR_PROJECT", location="us-central1")
operation = client.models.generate_videos(
model="veo-3.1-generate-001",
prompt="a cinematic wide shot of a detective interrogating a rubber duck in a dark room",
config=types.GenerateVideosConfig(
aspect_ratio="16:9", # "16:9" or "9:16"
resolution="1080p", # "720p", "1080p", or "4k" (4k adds latency)
duration_seconds=6, # 4, 6, or 8
number_of_videos=1, # 1 or 2
person_generation="allow_adult", # "allow_adult" or "dont_allow"
enhance_prompt=True, # Let the model rewrite/improve your prompt
generate_audio=True, # Generate synchronized audio
output_gcs_uri="gs://your-bucket/output.mp4" # Optional: Save directly to GCS
),
)Image-to-Video
Generate a video starting from a static image context. The model animates the image based on the prompt.
operation = client.models.generate_videos(
model="veo-3.1-generate-001",
prompt="zoom out of the flower field, play whimsical music",
image=types.Image.from_file(location="path/to/image.png"),
config=types.GenerateVideosConfig(
aspect_ratio="16:9",
duration_seconds=6,
resolution="1080p",
generate_audio=True,
),
)Prompt Engineering Parameters
When constructing prompts, consider these dimensions for better control:
Camera Control
- Angles:
Eye-Level Shot,Low-Angle Shot,High-Angle Shot,Bird's-Eye View,Close-Up,Wide Shot,Over-the-Shoulder Shot,Drone Shot. - Movement:
Pan (left/right),Tilt (up/down),Zoom (In/Out),Dolly (In/Out),Truck (Left/Right),Handheld,Shaky Cam.
Visual Style
- Styles:
Photorealistic,Cinematic,Vintage,Claymation style,Stop-motion animation,Film noir style,Cyberpunk. - Lighting:
Golden hour glow,Volumetric lighting,Film noir style,High-key lighting.
Audio Hints
- Mention sound effects or dialogue directly in the prompt (e.g., "Sound of waves crashing", "The person says: 'Hello world'").
Vertex AI Veo Prompting Guide
This guide provides a comprehensive overview of how to write effective prompts for Veo, Google's text-to-video and image-to-video generation model.
Core Components
A well-structured prompt typically includes: 1. Subject: The main character, object, or focus. 2. Action: What the subject is doing. 3. Scene/Context: The environment, setting, and background. 4. Cinematography: Camera angles, movements, and lens effects. 5. Visual Style: The overall aesthetic, lighting, and mood. 6. Ambiance: Sensory details. 7. Audio: Sound effects or speech.
Detailed Options
Cinematography (Camera & Lens)
Camera Angles
- Eye-Level Shot: Neutral perspective.
- Low-Angle Shot: Subject appears powerful.
- High-Angle Shot: Subject appears small/vulnerable.
- Bird's-Eye View / Top-Down: Directly from above.
- Dutch Angle / Canted Angle: Tilted to convey unease.
- Close-Up / Extreme Close-Up: Emphasizes emotions/details.
- Wide Shot / Establishing Shot: Shows context.
- Over-the-Shoulder: Behind one person looking at another.
- Point-of-View (POV): Character's visual perspective.
Camera Movements
- Static/Fixed: No movement.
- Pan (Left/Right): Horizontal rotation.
- Tilt (Up/Down): Vertical rotation.
- Dolly (In/Out): Camera moves closer/further.
- Zoom (In/Out): Lens focal length change.
- Truck (Left/Right): Camera moves laterally.
- Pedestal (Up/Down): Camera moves vertically.
- Crane / Aerial / Drone Shot: High altitude, sweeping.
- Handheld / Shaky Cam: Realism or unease.
- Whip Pan: Fast blur pan.
Lens & Optical Effects
- Wide-Angle (e.g., 24mm): Broader view, exaggerated perspective.
- Telephoto (e.g., 85mm): Compressed perspective, isolation.
- Shallow Depth of Field / Bokeh: Blurred background.
- Deep Depth of Field: Everything in focus.
- Lens Flare: Bright light source effect.
- Rack Focus: Shifting focus between subjects.
- Vertigo Effect (Dolly Zoom): Disorienting distortion.
Visual Style & Aesthetics
- Photorealistic / Cinematic: High fidelity.
- Vintage / Film Noir: Sepia, grainy, high contrast black & white.
- Animation Styles: 3D cartoon, Claymation, Stop-motion, Anime.
- Artistic: Impressionist (Van Gogh), Surrealist.
- Lighting: High-key (bright), Low-key (dark/moody), Golden hour, Volumetric (God rays), Backlighting (silhouette).
Temporal Elements
- Pacing: Slow-motion, Fast-paced action.
- Evolution: Time-lapse, Hyperlapse.
- Rhythm: Pulsating light, Rhythmic movement.
Best Practices
- Be Specific: Avoid "A man walking." Use "Eye-level medium shot of a young man in a soaked trench coat..."
- Negative Prompts: Define what to exclude (e.g., "Negative prompt: blurry, distorted, text, watermark").
- Iterate: Use Gemini to rewrite prompts for better detail.
Audio (Preview)
Specify sound effects or speech clearly.
- "The audio features water splashing."
- "The man says, 'Where is the rabbit?'"
Google GenAI SDK Source Code (Veo)
Use web_fetch to retrieve raw code for deep inspection of SDK internals, especially for video generation parameters.
Base URL: https://raw.githubusercontent.com/googleapis/python-genai/main/google/genai/
Key Modules for Veo
Models (Generation Logic)
- File:
models.py - URL:
https://raw.githubusercontent.com/googleapis/python-genai/main/google/genai/models.py - Purpose: Contains
generate_videosandgenerate_imagesmethods. Check this for parameter handling.
Types (Configuration)
- File:
types.py - URL:
https://raw.githubusercontent.com/googleapis/python-genai/main/google/genai/types.py - Purpose: Definitions for
GenerateVideosConfig,PersonGeneration,VideoCompressionQuality, etc.
Operations (Async Handling)
- File:
operations.py - URL:
https://raw.githubusercontent.com/googleapis/python-genai/main/google/genai/operations.py - Purpose: Handling LROs (Long Running Operations) returned by video generation.
Client
- File:
client.py - URL:
https://raw.githubusercontent.com/googleapis/python-genai/main/google/genai/client.py